Django模型并传递额外参数

时间:2012-03-29 06:43:55

标签: django django-forms

我想填充我的模型以包含IP地址,但是我无法根据需要设置ip,它只返回IP地址的“此字段是必需的”。

models.py

class SignUp(models.Model):
    ....
    ip = models.IPAddressField()

views.py

def my_view(request):
    form = SignUpForm(request.POST, ip_addr=get_client_ip(request))

forms.py

class SignUpForm(ModelForm):
    class Meta:
        model = SignUp
    def __init__(self, *args, **kwargs):
        self.ip_addr = kwargs.pop('ip_addr', None)
        super(SignUpForm, self).__init__(*args, **kwargs)

    def clean_ip(self):
        return self.ip_addr

2 个答案:

答案 0 :(得分:3)

您实际上没有为ip表单字段设置初始值,这意味着它是空的。尝试:

def __init__(self, *args, **kwargs):
    super(SignUpForm, self).__init__(*args, **kwargs)
    self.fields['ip'].initial = kwargs.pop('ip_addr', None)

The clean_ip method is for validation upon提交表单,仅在调用form.is_valid()后调用。它应检查该字段的值是否为有效的IP

答案 1 :(得分:0)

我认为你不应该在这里使用clean_ip。无论如何你不是在清理它。在您的视图中使用initial或覆盖save方法。