使用UpdateView为博客帖子添加评论

时间:2016-04-05 15:32:19

标签: python django django-forms

假设我有一个博客条目,网址为/blog/1,现在我想对博客帖子发表评论,因此我点击了网址/comment/1。在Django中,urls.py看起来像

urlpatterns = (
  url(r'^blog/(?P<pk>[0-9])',BlogView.as_view())
  url(r'^comment/(?P<pk>[0-9])',CommentView.as_view()
)

models.py就像

class Blog(models.Model):
    text = models.TextField()

class Comment(models.Model):
    comment_text = models.TextField()
    for_blog = models.ForeignKey(Blog) 

现在我在forms.py

中有一个CommentForm
class CommentForm(forms.ModelForm):
  for_blog = forms.IntegerField(required=True)
  def __init__(self, blog, *args, **kwargs):
  .
  .
  class Meta:
    model=Comment

问题是,如何在Django的UpdateView中实现它?特别是,我希望CommentForm中的for_blog预先填充BlogID,以便我可以更轻松地使用它。

2 个答案:

答案 0 :(得分:0)

我使用了一个formset(https://docs.djangoproject.com/en/dev/topics/forms/formsets/)。然后,您可以使用pk加载博客对象,并将其作为formset中的instance kwarg传递。然后只需在模板中渲染formset,您就可以获得相关的博客评论。

还允许以简单的方式添加更多/删除评论和方便的表单管理。

答案 1 :(得分:0)

要回答您的实际问题,要使用CommentForm,请在Meta类中定义字段(您不需要其他任何内容):

class CommentForm(forms.ModelForm):

  class Meta:

    model=Comment
    fields = ['for_blog']

然后在您看来,执行以下操作:

class ClassView(UpdateView):

  def get(self, request, pk, ...):

    blog = get_object_or_404(Blog, pk)
    forms = [CommentForm(instance=comment) for comment in blog.comment_set.all()]
    return render(request, 'template.html', {'forms': forms})