Неправильное сохранение пост-метода формы Django Detail view Mixin
Комментарий на странице детализации блога не сохраняется корректно при использовании форм django, В чем проблема? Я также искал об этой проблеме, но не смог найти проблему. Файл Models.py
class BlogPost(models.Model):
category = models.ForeignKey(Cateqory, related_name='category_id', on_delete=models.CASCADE)
blog_image = models.ImageField('blog content backqround image', upload_to='img/')
autor_avatar=models.ImageField('autor avatar', upload_to='img/')
title = models.CharField('title',max_length=100,db_index=True)
slug = models.SlugField(max_length=70,editable=False, db_index=True)
content = models.TextField('content')
autor_full_name = models.CharField('ful name',max_length=100)
created_at =models.DateTimeField('createt_at',auto_now=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse_lazy('blog_detail', kwargs={
'slug':self.slug
})
class Comment(models.Model):
blog = models.ForeignKey(BlogPost, related_name='blog_id', on_delete=models.CASCADE)
user_fullname = models.CharField('full name',max_length=100)
content = models.TextField('content')
created_at =models.DateTimeField('created_at',uto_now=True)
email = models.EmailField(max_length=70, default=None)
def __str__(self):
return (self.user_fullname)
ФайлViews.py
class PostDetailView(DetailView, CreateView):
template_name = 'blog-detail.html'
model = BlogPost
form_class = CommentForm
def get_success_url(self):
return reverse("blog-detail", kwargs={"slug": self.object.slug})
def get_context_data(self, *args, **kwargs):
context = super(PostDetailView, self).get_context_data(*args, **kwargs)
post = BlogPost.objects.get(slug=self.kwargs['slug'])
comments = Comment.objects.filter(blog_id=post)
context["blog"] = post
context["comment"] = comments
context['form'] = CommentForm()
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
return super().form_valid(form)
при использовании Formview перезапись метода form_valid таким образом работает как ожидалось, но я не знаю в чем проблема:
def form_valid(self, form):
new_comment = form.save(commit=False)
new_comment.blog = self.get_object()
new_comment.save()
return super().form_valid(form)