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

Django Model validation based on a field value of another Model

我有这个 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])

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

也许还有另一个人可以做这个验证!

Override clean on the model?文档中详细描述了验证过程,其中包括使用此方法实现自定义验证。因为它是一个绑定方法,所以它可以访问 self 然后 self.account.balance.