Заполнить поле результатом вычитания двух других полей

у меня есть следующая модель


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. Обратите внимание, что это будет выполняться каждый раз при сохранении экземпляра модели.

Вернуться на верх