我正在撰写一个非常简单的评论应用。由于一系列原因,我需要在这里写自己的,而不是使用像Disqus这样的优秀产品。
所以,我有一个页面,在该页面上,特殊用户可以发表评论。
除了将页面ID添加到表单提交中之外,我已经完成了所有工作。
当我尝试使用隐藏的表单字段和form.cleaned_data时,我一直收到关键错误。
所以现在我通过URL传递page_id。
我的urls.py
# Submit a comment
url(regex=r'^comment/create/(?P<page_id>\d+)/$',
view=CommentCreate.as_view(),
name='comment_create',
),
我的views.py
class CommentCreate(CreateView):
success_url = reverse_lazy('comment_submitted')
model = Comment
template_name='learnd/comment_submitted.html'
form_class = CommentCreateForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.page = self.kwargs['page_id']
self.object.save()
return HttpResponseRedirect(self.get_success_url())
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(CommentCreate, self).dispatch(*args, **kwargs)
我得到的错误是:
无法指定“u'1'”:“Comment.page”必须是“Page”实例。
这就是我迷路的地方。
我认为问题是kwargs用u:1重新调整字典,但我无法弄清楚如何只访问1来传递给我的视图。
欢迎任何帮助。
感谢。
答案 0 :(得分:0)
在分配之前,您需要查找Page
对象:
def form_valid(self, form):
page = get_object_or_404(Page, pk=self.kwargs.get('page_id'))
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.page = page
self.object.save()
return HttpResponseRedirect(self.get_success_url())
或者您可以执行self.object.page_id = self.kwargs['page_id']
,但是您可能会面临传入page_id
不是有效Page
的风险,而object.save()
会抛出异常。