Увеличение значения поля на 1 от последнего значения, если проверяется булево поле - Django

У меня есть простая модель применения:

class Application_data(Models.model):
    application_sn=models.AutoField(primary_key=True)
    applicant_name=models.CharField(max_length=20)
    sanction_sn=models.IntegerField(default=0)
    is_sanctioned=models.BooleanField(default=False)

В этой модели у меня может быть несколько приложений, не санкционированных. Я хочу, чтобы если я установлю is_sanctioned как true, sanction_sn увеличивался на 1, и для следующего случайного ряда из базы данных, если я установлю boolean как true, sanction_sn снова увеличивался на 1, т.е. на 2. И установка boolean как False должна также уменьшить значения sanction_sn, соответственно.

Например: в наборе из 130 строк, в 124-й санкции_sn я установил булево значение False, поэтому 123 записи до этой конкретной записи не имеют никакого эффекта, но после 123, 125-я запись будет иметь санкции_sn как 124, а 130-я запись будет иметь санкции_sn как 129.

Рассмотрите возможность использования сигнала presave django для достижения этой цели.

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Application_data)
def sanction_sn_changer(sender, instance, **kwargs):
    try:
        obj = sender.objects.get(application_sn=instance.application_sn)
    except sender.DoesNotExist:
        obj = None

    if obj:
        if obj.is_sanctioned != instance.is_sanctioned:
            if instance.is_sanctioned:
                instance.sanction_sn = obj.sanction_sn + 1
            else:
                instance.sanction_sn = obj.sanction_sn - 1

pre_save.connect(sanction_sn_changer, sender=Application_data)

Я думаю, что таким образом он проверит текущее значение экземпляра Application_data и внесет необходимые изменения

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