基于另一个模型的字段值的 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
.
我有这个 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
.