我正在编写一个非常简单的Comment应用程序。出于很多原因,我需要在这里写自己的东西,而不是使用像Disqus这样的伟大产品。
所以,我有一个页面,在这个页面上,特殊用户可以发表评论。
除了将页面id添加到表单提交之外,我已经完成了所有工作。
当我尝试使用隐藏的表单字段和form.cleand_data.时,我不断出现关键错误
所以现在我通过URL传递page_id。
我的网址.py
# Submit a comment
url(regex=r'^comment/create/(?P<page_id>d+)/$',
view=CommentCreate.as_view(),
name='comment_create',
),
我的观点.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来传递给我的视图。
欢迎任何帮助。
谢谢。
在分配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()
将引发异常。