如何在 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语句明显延伸的猜测