如何在 Django 的模型清理方法中验证多个字段
How to validate multiple fields in model clean method in Django
在我的 Django 模型中,我使用 clean()
方法来验证两组字段的值。我在相同的 clean()
方法中容纳了这两个条件。但是我发现系统检查了第一个条件而忽略了第二个条件。
这是我的模型和字段:
class Rates(models.Model):
master_doc = models.ForeignKey(Origin, ...
exit_rate = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, default=0.00)
from_date = models.DateField(null=True, verbose_name='From date')
to_date = models.DateField(null=True, verbose_name='To date')
def clean(self):
if self.exit_rate <= 0:
raise ValidationError({'exit_rate': _('The exit rate must be more than 0.')})
if self.from_date is not None:
if (self.to_date == self.from_date):
raise ValidationError({'to_date': _('From Date and end date may not be the same.')})
在这种情况下,仅针对第一个字段 exit_rate
引发验证错误。如果我颠倒 check 的顺序,则会单独针对日期字段引发验证错误,而不是针对汇率字段。
我尝试了 并使用了 error_dict
但出现错误 'ValidationError' object has no attribute 'error_list'
如何确保在不满足任一条件的情况下引发验证错误?
您需要先测试所有条件,然后引发一个包含多条消息的异常。像
def clean(self):
errors={}
if self.exit_rate <= 0:
errors['exit_rate']= _('The exit rate must be more than 0.')
if self.from_date is not None:
if (self.to_date == self.from_date):
errors['to_date'] = _('From Date and end date may not be the same.')
if errors:
raise ValidationError(errors)
我无法立即找到对 raise ValidationError( things)
的确切形式的引用以传递多个错误。以上是根据原题中raise语句明显延伸的猜测
在我的 Django 模型中,我使用 clean()
方法来验证两组字段的值。我在相同的 clean()
方法中容纳了这两个条件。但是我发现系统检查了第一个条件而忽略了第二个条件。
这是我的模型和字段:
class Rates(models.Model):
master_doc = models.ForeignKey(Origin, ...
exit_rate = models.DecimalField(max_digits=7, decimal_places=2, null=True, blank=True, default=0.00)
from_date = models.DateField(null=True, verbose_name='From date')
to_date = models.DateField(null=True, verbose_name='To date')
def clean(self):
if self.exit_rate <= 0:
raise ValidationError({'exit_rate': _('The exit rate must be more than 0.')})
if self.from_date is not None:
if (self.to_date == self.from_date):
raise ValidationError({'to_date': _('From Date and end date may not be the same.')})
在这种情况下,仅针对第一个字段 exit_rate
引发验证错误。如果我颠倒 check 的顺序,则会单独针对日期字段引发验证错误,而不是针对汇率字段。
我尝试了 error_dict
但出现错误 'ValidationError' object has no attribute 'error_list'
如何确保在不满足任一条件的情况下引发验证错误?
您需要先测试所有条件,然后引发一个包含多条消息的异常。像
def clean(self):
errors={}
if self.exit_rate <= 0:
errors['exit_rate']= _('The exit rate must be more than 0.')
if self.from_date is not None:
if (self.to_date == self.from_date):
errors['to_date'] = _('From Date and end date may not be the same.')
if errors:
raise ValidationError(errors)
我无法立即找到对 raise ValidationError( things)
的确切形式的引用以传递多个错误。以上是根据原题中raise语句明显延伸的猜测