huang7899135 2021-10-20 20:21 采纳率: 0%
浏览 9
已结题

关于Dijango modelform 中的clean方法疑问

models类

class IpInfo(models.Model):
    ip = models.CharField(max_length = 20,unique=True)
    network_type = models.CharField(max_length = 10,choices=(("PPPOE","pppoe"),("DHCP","dhcp"),("STATIC","static")))

modelfrom类:

class IpInfoForm(ModelForm):
    class Meta:
        model = models.IpInfo
                fields = "__all__"
        def clean(self):
        ip_complie = re.compile(r'(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])')
        ip = self.cleaned_data.get("ip")
        flag = re.match(ip_complie, ip)
        network_type = self.cleaned_data.get("network_type")
        if network_type == "STATIC" and not(flag):
            raise forms.ValidationError(message="IP格式不正确,请从新输入")

当添加clean()方法后,原IpInfoForm中“ip”字段中的unique就不会生效了,当前端提交一个重复的ip字段过来,后端直接报错

img

如果注释掉clean,则会正常验证,各位同僚看看问题出在哪里?我的需求是,既要验证的ip字段的unique,又要保留clean中的方法。

  • 写回答

1条回答 默认 最新

  • huang7899135 2021-10-20 20:46
    关注

    自问自答吧,百度的确不好用,确实没有搜到类似的解决方案,最后还是再django官方文档里找到了答案:

        def clean(self):
            cleaned_data = super().clean()
            。。。
            再原来的基础上加这一句,确保父类的字段得以保留
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月28日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 悬赏 关于#c++#的问题
  • ¥15 Cortexm3是小端序,但为什么32位的指令看起来并不是如此?
  • ¥15 k8s安装calico失败,pod状态为Init:ImagePullBackOff
  • ¥15 大家好!我想学习编程业余时间挣一些钱
  • ¥15 QT移植QT库make报错
  • ¥15 PANATERM ver.6.0无法连接
  • ¥15 .net core实现联想查询
  • ¥15 HL7 报告转Excel 、PDF 、jpg
  • ¥18 WPF HandyControl Trigger IsSelected 触发器修改 ListBox 中 DataTemplate 模板 StackPanel 背景图片(相关搜索:触发器)
  • ¥15 下载intel stratix10对应的d5005的acceleration stack for development