Увеличение значения поля на 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 и внесет необходимые изменения