0

我正在编写一个非常简单的评论应用程序。出于多种原因,我需要在这里编写自己的代码,而不是使用像 Disqus 这样的优秀产品。

所以,我有一个页面,在那个页面上,特殊用户可以发表评论。

除了将页面 ID 添加到表单提交之外,我已经完成了所有工作。

当我尝试使用隐藏的表单字段和 form.cleaned_data 时,我不断收到关键错误。

所以现在我通过 URL 传递 page_id。

我的网址.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 以传递给我的视图。

欢迎任何帮助。

谢谢。

4

1 回答 1

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()会引发异常。

于 2013-07-11T23:57:30.607 回答