将表单附加到帖子列表中的每个帖子

时间:2017-07-11 16:44:36

标签: django django-forms

所以我在我的网站上有一个帖子列表,我想实现类似“即时评论”的内容。问题是,当我在views.py中定义Form并提交它时,所有Blogposts都会获得评论。 instance = get_object_or_404(Post,...)instance = get_list_or_404(Post,...)之类的内容不起作用。然后我尝试为表单实现context_processor但同样的问题。现在我想初始化API以处理任务,但也许有人对如何解决该问题有更好的想法,我不必一直尝试不同的事情。

我的Blogpost是正常QuerySet,如articles = Post.objects.all() 表单需要帖子中的一些信息,例如content_typeid。如果需要任何其他信息,请发表评论。

  

修改

在views.py中

instance = get_object_or_404(Post,id=1)
initial_data = {
    "content_type": instance.get_content_type,
    "object_id": instance.id
}
formInCom = CommentForm(request.POST or None, initial=initial_data)
if formInCom.is_valid():
    print("form is valid")
    content_type = instance.get_content_type
    content_data = formInCom.cleaned_data.get("content")
    obj_id       = formInCom.cleaned_data.get("object_id")
    new_comment, created = Comment.objects.get_or_create(
                user         = request.user,
                content_type = content_type,
                object_id    = obj_id,
                content      = content_data,
        )
    messages.success(request, 'comment was posted')

所以我可以发布这样的评论,但是对于ID为1的Blogpost。由于instance = get_object_or_404(Post,id=1)当我尝试使用id时没有get_object_or_404它不起作用,更改{{1} } get_list_or_404不起作用。当我将初始数据从验证中删除时,表单无效。如何覆盖id

  

编辑2

forms.py进行评论:

class CommentForm (forms.Form):
  content_type = forms.CharField(widget=forms.HiddenInput)
  object_id = forms.IntegerField(widget=forms.HiddenInput)
  content = forms.CharField(label='', widget=forms.Textarea)
模板中的

<form method="POST" >
 {% csrf_token %}
 {{ formInCom.content }}
 {{ formInCom.object_id }}
 {{ formInCom.content_type }}
  <input type="submit" value="submit"  />
</form>

1 个答案:

答案 0 :(得分:1)

你过度思考这个问题。您只需在提交的表单中包含帖子ID即可创建评论。