2011-06-13 58 views
11

如何将用户对象或请求传递给我的表单进行验证?传递用户,请求到表单

例如,我希望能够做这样的事情 -

class Form(forms.Form): 
    ... 
    def clean(self) 
     user = request.user # how to get request.user here? 
     user = User   # how to pass the actual User object? 

谢谢。

回答

27

只是把它传递到构造函数,并将其存储为一个实例变量:

class MyForm(forms.Form): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop("request") 
     super(MyForm, self).__init__(*args, **kwargs) 

    def clean(self): 
     print self.request.user 
     ... 

在你看来:

form = MyForm(..., request=request) 

如果使用基于类的视图(在本例中,CreateView的):

class MyCreateView(CreateView): 

    ... 

    def get_form_kwargs(self): 
     kwargs = super(MyCreateView, self).get_form_kwargs() 
     kwargs.update({'request': self.request}) 
     return kwargs 
+1

奇怪,但这不工作:NameError:name'request'未定义 – 2016-02-29 09:59:02