use*_*095 0 django django-models django-validation
在我的 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.')})
Run Code Online (Sandbox Code Playgroud)
在这种情况下,仅针对第一个 ie 字段引发验证错误exit_rate。如果我颠倒检查的顺序,则仅针对日期字段(而不是费率字段)引发验证错误。
我尝试了这个解决方案并使用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)
Run Code Online (Sandbox Code Playgroud)
raise ValidationError( things)我无法立即找到传递多个错误的确切形式的引用。以上是基于原始问题中的 raise 语句的明显扩展的猜测。
| 归档时间: |
|
| 查看次数: |
5959 次 |
| 最近记录: |