基于另一个模型的字段值的Django模型验证

问题描述 投票:0回答:1

我有这个Django模型:

   from accounts.models import Account
   

   class BankOperation(models.Model):
    
       created_at = models.DateTimeField(auto_now_add=True)
       account = models.ForeignKey(Account, on_delete=models.CASCADE)
       operation_import = models.FloatField(default=0.0)
    
    

我要确保operation_import不高于account.balance官方的方式是什么?我已经看到一些有关覆盖save()方法的答案,但其他人则建议不要这样做。

我应该添加一个预先保存的信号并引发某种异常吗?

是否可以创建一个接受参数的字段验证器?所以也许像这样:

   def validate_bank_operation_import(value, account_balance):

   if value > account_balance:

        raise ValidationError("Bank operation import is higher than account balance!")

并且在我的模型中,我将字段更改为:

operation_import = models.FloatField(default=0.0, validators=[validate_bank_operation_import])

但是我可以将参数传递给验证器吗?如果是,我该怎么办?

也许还有另一个要执行此验证!

django django-models django-signals django-validation
1个回答
1
投票

Override clean on the model?验证过程在文档中进行了详细描述,其中包括使用此方法来实现自定义验证。由于它是绑定方法,因此可以访问clean,因此可以访问self

© www.soinside.com 2019 - 2024. All rights reserved.