所以我在我的网站上有一个帖子列表,我想实现类似“即时评论”之类的东西。问题是,当我在Form
中定义一个views.py并提交它时,所有博客都会收到评论。像instance = get_object_or_404(Post,...)
或instance = get_list_or_404(Post,...)
这样的东西不起作用。然后,我尝试为表单实现一个context_processor
,但问题是相同的。现在我想初始化一个API
来处理这个任务,但是也许有人对如何解决这个问题有一个更好的想法,而且我不需要一直尝试不同的事情。
我的博客是一个普通的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的博客,由于instance = get_object_or_404(Post,id=1)
,当我尝试不使用id
时,它不起作用,将get_object_or_404
更改为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>
发布于 2017-07-11 08:48:48
你想得太多了。您只需要在提交的表单中包含post ID就可以创建注释。
https://stackoverflow.com/questions/45040299
复制