Django表单的clean()方法 - 需要客户端的IP地址

3

我正在重写Django表单上的clean()方法。 我想要访问客户端的IP地址(假设这是一个绑定的表单)。 如果我有一个对请求对象的引用,我可以轻松从META("REMOTE_ADDR")获取它。 但是,我没有对请求的引用。

有什么想法吗?

1个回答

13

所以给自己一个对它的引用。

class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(MyModelForm, self).__init__(*args, **kwargs)


    def clean(self):
        ip_address = self.request['META']['REMOTE_ADDR']

在你的视角中:

myform = MyModelForm(request.POST, request=request)

1
为什么要使用pop()?是为了清理(例如摆脱不再使用的东西)吗?还是比get()更高效? - orokusaki
3
这通常是一个好的实践方法。例如,父类方法可能实际上并不接受 *args 和 **kwargs 参数——它的定义中可能只有命名参数。如果是这样的话,传递意外的 request 参数将会引发异常。 - Daniel Roseman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接