8

在我的CreateView课堂上,我将重写该form_valid()函数,如下所示:

class ActionCreateView(CreateView):
    model = Action
    form_class = ActionCreateForm
    success_url = reverse_lazy('profile')

    def get_initial(self):
        initial = super(ActionCreateView, self).get_initial()
        initial['request'] = self.request
        return initial

    def form_valid(self, form):
        form.instance.user = self.request.user
        print 'user: %s'%form.instance.user
        try:
            da = form.cleaned_data['deadline_date']
            ti = datetime.now()
            form.instance.deadline = datetime(da.year, da.month, da.day, ti.hour, ti.minute, ti.second )
        except Exception:
            raise Http404
        return super(ActionCreateView, self).form_valid(form)

但事实证明,该form_valid方法从未被调用,因为user从未打印过。有趣的是,cleanforms.py 中的方法被调用了。

没有显示错误(因此我没有要显示的回溯)。用户只是再次被重定向到表单。 这种行为的原因可能是什么? 我在 Django 1.5 和 Python 2.7 上运行。

4

2 回答 2

6

该表格很可能无效。您可以覆盖 form_invalid() 并查看是否调用了它,或者覆盖 post() 并查看正在发布哪些数据。

于 2015-05-30T05:12:57.903 回答
2

form.instance.user = self.request.user 错误

请尝试此变体:

def form_valid(self, form):
    self.object = form.save(commit=False)  
    if self.request.user.is_authenticated():
        self.object.user = self.request.user
    # Another computing etc
    self.object.save()
    return super(ActionCreateView, self).form_valid(form)

PS你真的需要改变get_initial吗?在你的代码上,我看不到这种需要。

于 2013-05-30T02:29:54.790 回答