假设我有一个博客条目,网址为/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
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
,以便我可以更轻松地使用它。
答案 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})