Django View - объект 'Comment' не имеет атрибута 'comments'
Я пытаюсь сделать так, чтобы мои комментарии удалялись, но когда я запускаю код, появляется следующая ошибка:
Мой комментарий_удален просмотров:
class CommentDelete(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
model = Comment
template_name = 'comment_delete.html'
success_url = reverse_lazy('article_list')
def test_func(self):
obj = self.get_object()
return obj.comments == self.request.user
models.py Комментарий модели:
class Comment(models.Model):
article = models.ForeignKey(
Article,
on_delete=models.CASCADE,
related_name='comments',
)
name = models.CharField(max_length=140)
body = models.TextField()
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('article_list')
obj - это модель Comment, а не Article, поэтому у нее нет атрибута .comments, но даже если бы это было так, она была бы RelatedManager для Comment, поэтому нет смысла сравнивать ее с request.user.
Если Comment связан с пользователем, необходимо работать с ForeignKey, который вводит пользователя в Comment, так:
from django.conf import settings
class Comment(models.Model):
article = models.ForeignKey(
Article,
on_delete=models.CASCADE,
related_name='comments',
)
body = models.TextField()
name = models.CharField(max_length=140)
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='comments',
on_delete=models.CASCADE
)
date_added = models.DateTimeField(auto_now_add=True)
тогда вы можете фильтровать с помощью:
class CommentDelete(LoginRequiredMixin, DeleteView):
model = Comment
template_name = 'comment_delete.html'
success_url = reverse_lazy('article_list')
def get_queryset(self):
return super().get_queryset().filter(
user=self.request.user
)
Note: The
.get_absolute_url()method [Django-doc] should return a canonical URL, that means that for two different model objects the URL should be different and thus point to a view specific for that model object. You thus should not return the same URL for all model objects.
