一尘不染

如何访问表单的clean()方法中的请求对象或任何其他变量?

django

我试图在request.user中获取表单的clean方法,但是如何访问请求对象?我可以修改clean方法以允许输入变量吗?


阅读 433

收藏
2020-03-26

共1个答案

一尘不染

Ber的答案-将其存储在threadlocals中-是一个非常糟糕的主意。绝对没有理由这样做。

更好的方法是重写表单的__init__方法以使用额外的关键字参数request。这会将请求存储在表单中,在需要的地方,你可以从此处以干净的方法访问它。

class MyForm(forms.Form):

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(MyForm, self).__init__(*args, **kwargs)


    def clean(self):
        ... access the request object via self.request ...

并且在你看来:

myform = MyForm(request.POST, request=request)
2020-03-26