因此,我在我的網站上有帖子列表,我希望實施類似「即時評論」的內容。問題是,當我在views.py中定義一個Form
並提交它時,所有的Blogposts都會收到評論。像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')
所以,我可以發表這樣的評論,但對博客帖子有1.由於instance = get_object_or_404(Post,id=1)
的的ID,當我嘗試使用它沒有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>
是的,我也有這種感覺,我正在推翻這一點,但我無法獲取正確的ID。我添加了上下文處理器功能。我的錯誤在哪裏? – hansTheFranz
那麼我不知道你爲什麼使用上下文處理器,一開始。但是您需要顯示模板,以查看object_id的值來自哪裏。 –
我編輯了這個問題,並將表單驗證返回到views.py。值object.id來自實例。這是問題所在,我無法正確獲取對象文章。如果我沒有聲明一個ID,我會得到:'get方法返回多個對象......'如果我硬編碼一個ID,我總是得到相同的Post。沒有聲明一個實例,我無法渲染窗體... – hansTheFranz