有效()未被调用
  在我的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永远不会被打印。  有趣的是,在forms.py中的clean方法被调用。 
没有错误显示(因此我没有追溯显示)。 用户只是重定向到窗体。 什么可能是这种行为的原因? 我在Django 1.5和Python 2.7上运行。
  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? 在你的代码我没有看到这种需要。
该表单可能无效。 你可以重写form_invalid()并查看是否被调用,或覆盖post()并查看正在发送的数据。
链接地址: http://www.djcxy.com/p/13525.html上一篇: valid() not called
下一篇: How do I pass arguments to Spring AOP advice with annotated parameters?
