Я пытался использовать dispatch () в своем коде, но, к сожалению, столкнулся с несколькими ошибками, которые не смог устранить. Последней ошибкой было AttributeError: у объекта 'PostDetailView' нет атрибута 'method'. Я не могу отобразить существующие комментарии (я добавил некоторые через страницу администратора) или форму комментария.
views.py
class PostDetailView(DetailView):
model = Post
def dispatch(request, *args, **kwargs):
post = get_object_or_404(Post)
comments = post.comments.filter(active=True)
new_comment = None
if request.method == 'POST':
comment_form = CommentForm(data=request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.post = post
new_comment.save()
else:
comment_form = CommentForm()
return render(request, template_name, {'post': post,
'comments': comments,
'new_comment': new_comment,
'comment_form': comment_form})
forms.py
from .models import Comment
from django import forms
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('name', 'email', 'body')
models.py
class Post(models.Model):
title = models.CharField(max_length=20)
content = models.TextField()
date_posted = models.DateTimeField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk':self.pk})
class Comment(models.Model):
post = models.ForeignKey(Post,on_delete=models.CASCADE,related_name='comments')
name = models.CharField(max_length=80)
email = models.EmailField()
body = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
active = models.BooleanField(default=False)