在django模型中,我定义了一个clean函数,用于在保存数据之前验证附加条件。
这是我的模型:
class TestRange(models.Model):
SERVICE = [
('s1', 'Service 1'),
('s2', 'Service 2')
]
service = models.CharField(max_length=2, choices=SERVICE)
SDA = [
(False, 'NO SDA'),
(True, 'SDA')
]
sda = models.BooleanField(choices=SDA)
number_start = models.CharField(max_length=10, validators=[valide_phone_number])
number_end = models.CharField(max_length=10, validators=[valide_phone_number])
def clean(self):
if int(self.number_end) < int(self.number_start):
raise ValidationError({'number_end': _("The end number must be greater than or equal to the start number")})
if self.sda and len(self.number_start)!=10:
raise ValidationError({'number_start': _("A SDA number consists of 10 digits")})
super(TestRange, self).clean()由于这个函数的定义--管理表单的默认验证不再有效--我不再需要在注册前检查表单的字段。
所以我收到了一条错误消息:
invalid literal for int() with base 10: ''
Request Method: POST
Request URL: http://127.0.0.1:8000/admin/gestnum/testrange/add/
Django Version: 4.1
Exception Type: ValueError
Exception Value:
invalid literal for int() with base 10: ''
Exception Location: C:\Users\user\Documents\DEV\test\test\models\TestRange.py, line 25, in clean
Raised during: django.contrib.admin.options.add_view
Python Executable: C:\Users\user\Documents\DEV\test\.venv\Scripts\python.exe
Python Version: 3.9.6如何继续保持默认验证并添加我的附加验证
不具备以下功能:
您有没有定义新表单的解决方案吗?
发布于 2022-08-12 13:10:50
尝试以这样的方式定义您的干净方法:
def clean(self):
number_start = int(self.number_start) if self.number_start.isnumeric() else 0
number_end = int(self.number_end) if self.number_end.isnumeric() else 0
if number_end < number_start:
raise ValidationError({'number_end': _("The end number must be greater than or equal to the start number")})
if self.sda and len(f'{number_start}') != 10:
raise ValidationError({'number_start': _("A SDA number consists of 10 digits")})
super().clean()当您使用管理面板输入数据时,self.number_start和self.number_end字段可能是空的,因为没有使用任何整数值填充它们。另外,我认为number_start和number_end字段应该是IntegerField类型,这样就不存在这个问题了。
https://stackoverflow.com/questions/73334412
复制相似问题