Объект типа 'Post' не имеет атрибута 'filter'

Каждый раз, когда я пытаюсь написать комментарий к посту, я получаю AttirbuteError на номер поста. Например, 'AttributeError at /post/54/', а ниже написано "type object 'Post' has no attribute 'filter'". Затем он направляет меня к моей строке 58 файла views.py, которая гласит: post = self.get_object(Post). Это часть моего класса PostDetailClass:

class PostDetailView(DetailView):
    model = Post
    
    form = CommentForm
    
    def post(self, request, *args, **kwargs):
        form = CommentForm(request.POST)
        if form.is_valid():
            post = self.get_object(Post)
            form.instance. user = request.user
            form.instance.post = post
            reply_id = request.POST.get('comment_id')
            comment_qs = None
            if reply_id:
                comment_qs = Comment.objects.get(id=reply_id)
            reply = comment_qs, reply=None
            form.save()
            form.save_m2m()

            return redirect(reverse("post", kwargs={
                'content': Post.content
            }))

Может ли кто-нибудь указать, что не так с моим кодом? Спасибо.

Проблема возникает при передаче Post в self.get_object(). get_object принимает queryset в качестве аргумента. Объект queryset будет иметь .filter(), но не Post.

В этом случае вам не нужно ничего передавать в self.get_object. Когда вы ничего не передаете, кверисет по умолчанию принимает значение self.get_queryset().

Короче говоря, измените эту строку на:

post = self.get_object()

сначала вы должны попытаться получить объект post, как показано ниже :-

object_id = self.kwargs[self.pk_url_kwarg]
post = self.model.objects.get(id=object_id)

в вашем посте метод :-

def post(self, request, *args, **kwargs):
    form = CommentForm(request.POST)
    if form.is_valid():
        object_id = self.kwargs[self.pk_url_kwarg]
        post = self.model.objects.get(id=object_id)
        form.instance.user = request.user
        form.instance.post = post
        reply_id = request.POST.get('comment_id')
        comment_qs = None
        if reply_id:
            comment_qs = Comment.objects.get(id=reply_id)
        reply = comment_qs, reply=None
        form.save()
        form.save_m2m()

        return redirect(reverse("post", kwargs={
            'content': post.content
        }))
Вернуться на верх