【发布时间】:2020-01-07 16:31:00
【问题描述】:
我在 django 博客中有一个评论部分,有两种形式,一种是评论,另一种是回复评论,但评论表单工作正常,回复表单不起作用!我试图做,但得到错误... /page/9/ 处的 IntegrityError FOREIGN KEY 约束失败...
感谢您的帮助 :) 谢谢。
views.py
class PostDetailView(DetailView):
model = Post
template_name = "post_detail.html"
context_object_name = 'post'
form = CommentForm()
def get_object(self):
obj = super().get_object()
if self.request.user.is_authenticated:
PostView.objects.get_or_create(
user=self.request.user,
post=obj
)
return obj
def get_context_data(self, **kwargs):
category_count = get_category_count()
most_recent = Post.objects.order_by('-timestamp')[:3]
context = super().get_context_data(**kwargs)
context['most_recent'] = most_recent
context['page_request_var'] = "page"
context['category_count'] = category_count
context['form'] = self.form
return context
def post(self, request, *args, **kwargs):
form = CommentForm(request.POST)
form = ReplyForm(request.POST)# how to work with this form like above from
if form.is_valid():
post = self.get_object()
form.instance.user = request.user
form.instance.post = post
form.save()
return redirect(reverse("post-detail", kwargs={
'pk': post.pk
}))
models.py
class Reply(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
content = models.TextField()
comment = models.ForeignKey('Comment', related_name='replies',default=False, null=True,
on_delete=models.CASCADE)
def __str__(self):
return self.content
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
content = models.TextField()
post = models.ForeignKey('Post', related_name='comments', default=False,
on_delete=models.CASCADE)
def __str__(self):
return self.content
【问题讨论】:
-
你在
post(大纲代码?)中重新定义/丢失了form,但这并不能解释IntegrityError。您需要详细阅读错误以找出导致该错误的 DB 表中的哪个字段的无效值。 -
它确实解释了完整性错误:您正在保存
ReplyForm实例(form是您的ReplyForm)而不分配comment字段,因为您认为它是CommentForm。 -
兄弟,我该如何为 ReplyFrom 做到这一点,就像我 di commentFrom 一样?有什么方法可以在该 DetailView 中使用这两种形式? @dirkgroten
标签: python django django-models django-forms django-views