Объект типа '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
}))