2016-01-13 63 views
0

还有就是我的观点:为什么在FormView后不会调用postView后清理?

class SendTransfer(SingleObjectMixin, FormView): 
    model = BankAccount 
    form_class = SendTransferForm 
    template_name = 'dashboard/send_transfer.html' 

    def dispatch(self, request, *args, **kwargs): 
     self.object = self.get_object() 
     return super(SendTransfer, self).dispatch(request, *args, **kwargs) 

    def get_object(self, queryset=None): 
     obj = super(SendTransfer, self).get_object(queryset) 

     if not obj.is_owner(self.request.user.citizen): 
      raise Http404 

     return obj 

    def form_valid(self, form): 
     data = form.cleaned_data 
     MoneyTransfer.objects.create(sender=self.object, 
            receiver=data['receiver'], # ModelChoiceField in the form 
            total=data['total'], # FloatField in the form, etc. 
            when=timezone.localtime(timezone.now()), 
            comment=data['comment']) 
     return redirect('AccountDetail', self.object.pk) 

    def form_invalid(self, form): 
     return render(self.request, self.template_name, self.get_context_data()) 

    def get_form_kwargs(self): 
     return {'sender': BankAccount.objects.get(id=self.kwargs['pk']), 'user': self.request.user} 

当表单提交 - 我得到了相同的结果获取之后。调试器说clean()不被调用,但form_invalid是有效的。问题是什么?

+0

问题编辑。无论如何,form_invalid都在调用。 form.clean()没有调用 –

回答

2

您已覆盖get_form_kwargs,现在您不再将data传递给表单。如果没有data,表单是未绑定的,所以永远不会生效。

最好先致电super(),更新kwargs,然后返回它们。

def get_form_kwargs(self): 
    kwargs = super(SendTransfer, self).get_form_kwargs() 
    kwargs['sender'] = BankAccount.objects.get(id=self.kwargs['pk']), 
    kwargs['user'] = self.request.user 
    return kwargs 
相关问题