Django Проверка модели на основе значения поля другой Модели - PullRequest
0 голосов
/ 11 марта 2020

У меня есть 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])

Но могу ли я передать параметры в валидатор? если да, как мне это сделать?

возможно, есть еще кто-нибудь, чтобы сделать эту проверку!

1 Ответ

1 голос
/ 11 марта 2020

Переопределить clean в модели? Процесс проверки подробно описан в do c, который включает использование этого метода для реализации пользовательской проверки. Так как это связанный метод, он имеет доступ к self и, следовательно, self.account.balance.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...