2017-07-11 69 views
0

因此,我在我的網站上有帖子列表,我希望實施類似「即時評論」的內容。問題是,當我在views.py中定義一個Form並提交它時,所有的Blogposts都會收到評論。像instance = get_object_or_404(Post,...)instance = get_list_or_404(Post,...)不起作用。然後我試圖實現一個context_processor的形式,但同樣的問題。現在我想初始化一個API來照顧任務,但也許有人對如何解決這個問題有更好的想法,我不必一直嘗試不同的事情。在帖子列表中爲每個帖子附加一個表格

我的博文是正常的QuerySetarticles = 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') 

所以,我可以發表這樣的評論,但對博客帖子有1.由於instance = get_object_or_404(Post,id=1)的的ID,當我嘗試使用它沒有id它不起作用,更改get_object_or_404get_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

你過想這。您只需在您提交的表單中添加帖子ID以創建評論。

+0

是的,我也有這種感覺,我正在推翻這一點,但我無法獲取正確的ID。我添加了上下文處理器功能。我的錯誤在哪裏? – hansTheFranz

+0

那麼我不知道你爲什麼使用上下文處理器,一開始。但是您需要顯示模板,以查看object_id的值來自哪裏。 –

+0

我編輯了這個問題,並將表單驗證返回到views.py。值object.id來自實例。這是問題所在,我無法正確獲取對象文章。如果我沒有聲明一個ID,我會得到:'get方法返回多個對象......'如果我硬編碼一個ID,我總是得到相同的Post。沒有聲明一個實例,我無法渲染窗體... – hansTheFranz