Преобразование представления функций Django в представление на основе классов
Я не знаю, как преобразовать эти функции в представление на основе класса. Как вызвать функции фильтра, добавления и удаления в представлении, основанном на классе? Должен ли я как-то перезаписывать функции в TemplateView?
@ login_required
def favourite_list(request):
new = Post.newmanager.filter(favourites=request.user)
return render(request,
'accounts/favourites.html',
{'new': new})
@ login_required
def favourite_add(request, id):
post = get_object_or_404(Post, id=id)
if post.favourites.filter(id=request.user.id).exists():
post.favourites.remove(request.user)
else:
post.favourites.add(request.user)
return HttpResponseRedirect(request.META['HTTP_REFERER'])
Попробуйте это:
from django.views import View
from django.views.generic.list import ListView
from django.contrib.auth.mixins import LoginRequiredMixin
class FavouriteListView(LoginRequiredMixin, ListView):
model = Post
template_name = 'accounts/favourites.html'
context_object_name = 'new'
def get_queryset(self):
return Post.newmanager.filter(favourites=request.user)
class FavouriteAddView(LoginRequiredMixin, View):
def post(self, request):
post = get_object_or_404(Post, id=id)
if post.favourites.filter(id=request.user.id).exists():
post.favourites.remove(request.user)
else:
post.favourites.add(request.user)
return HttpResponseRedirect(request.META['HTTP_REFERER'])