所以我在我的网站上有一个帖子列表,我想实现类似“即时评论”的内容。问题是,当我在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_type
和id
。如果需要任何其他信息,请发表评论。
在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>
答案 0 :(得分:1)
你过度思考这个问题。您只需在提交的表单中包含帖子ID即可创建评论。