【发布时间】:2020-06-23 10:30:27
【问题描述】:
我有这个 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])
但是我可以将参数传递给验证器吗?如果是,我该怎么做?
也许还有其他人来做这个验证!
【问题讨论】:
-
我不知道谁“建议”不要覆盖
Model.save(),但这完全是废话。甚至the doc explicitely tells it's ok:“如果你想要自定义保存行为,你可以重写这个save()方法”
标签: django django-models django-signals django-validation