Заполнить поле результатом вычитания двух других полей
у меня есть следующая модель
class FeeModel(models.Model):
user=models.ForeignKey(User,on_delete=models.CASCADE,null=True)
total_fee=models.IntegerField(default=100000)
paid_fee=models.IntegerField()
remaining_fee=models.IntegerField(default=0)
Мне нужно, чтобы оставшаяся плата была заполнена результатом (total_fee - paid_fee). Как это сделать?
Вы можете сделать это различными способами и в разных местах. Сигнал pre_save - это один из подходов.
(В models.py, ниже вашего класса FeeModel)
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save, sender=FeeModel)
def set_remaining_fee(sender, instance, *args, **kwargs):
instance.remaining_fee = (instance.total_fee - instance.paid_fee)
Как это работает: Пользователь вводит в форму значения для total_fee и paid_fee. После отправки и непосредственно перед save() сигнал вычисляет разницу и применяет ее к полю remaining_fee. Обратите внимание, что это будет выполняться каждый раз при сохранении экземпляра модели.