【问题标题】:Validate form depending on another field根据另一个字段验证表单
【发布时间】:2013-10-16 10:05:22
【问题描述】:

我有这个表格:

class NetworkInput(forms.Form):          
    IP = forms.GenericIPAddressField()     
    Netmask = forms.IntegerField()

用户应该能够输入 IPv4 或 IPv6 地址。 根据 IP 版本,网络掩码的验证应如下所示:

import ipcalc
IP = ipcalc.IP(IP)
if IP.version() == 4:
    if Netmask > 29:
        raise ValidationError(u'%s is not big enough' % value)
else:
    if Netmask > 125:
        raise ValidationError(u'%s is not big enough' % value)

但我不知道在验证网络掩码时如何访问变量 IP。

【问题讨论】:

    标签: django-forms django-validation


    【解决方案1】:

    如 django 文档中所述,https://docs.djangoproject.com/en/1.5/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

    创建一个进行组合验证的 clean() 方法,例如

    def clean(self):
        IP = self.cleaned_data['IP']
        Netmask = self.cleaned_data['Netmask']
        IP = ipcalc.IP(IP)
        if IP.version() == 4:
            if Netmask > 29:
                raise ValidationError(u'%s is not big enough' % value)
        else:
            if Netmask > 125:
                raise ValidationError(u'%s is not big enough' % value)
    

    【讨论】:

    • 看起来更好。但是你忘了返回数据。 :) 无论如何,如果我现在给他的不是有效的 IPv4/6 地址,我最终会出现 KeyError?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 2015-09-06
    • 2018-09-04
    • 2021-03-11
    • 2019-01-25
    • 2017-02-28
    相关资源
    最近更新 更多