如果一个布尔字段被选中,则字段值从最后一个值增加1



我有一个简单的应用程序模型:

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为真,sanction_sn增加1,并且对于db的下一个随机行,如果我设置布尔值为真,sanction_sn再次增加1,即2。并且将boolean设置为False也应该相应地减小sanction_sn的值。

例如:在一组130行的数据中,在第124条sanction_sn处,我将布尔值设置为False,因此在该特定记录之前的123条记录根本不起作用,但在123之后,第125条记录将把sanction_sn设为124,第130条记录将把sanction_sn设为129。

考虑使用保存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实例的当前值并进行必要的更改

最新更新