我有这个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?验证过程在文档中进行了详细描述,其中包括使用此方法来实现自定义验证。由于它是绑定方法,因此可以访问clean
,因此可以访问self
。