from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=ModelA)
def test_stuff_change(instance, sender, *args, **kwargs):
if instance.paid:
instance.amount += 1
instance.paid = False
instance.save()
Если вы не хотите instance.paid = False
после instance.amount += 1
, сделайте следующее:
class ModelA(models.Model):
paid = models.BooleanField(default=False)
is_add = models.BooleanField(default=False)
amount = models.DecimalField()
@receiver(post_save, sender=ModelA)
def test_stuff_change(instance, sender, *args, **kwargs):
if instance.paid and not instance.is_add:
instance.amount += 1
instance.is_add= True
instance.save()
Если вы имеете в виду добавить сумму при оплате оплаченного переключения, сделайте следующее:
class ModelA(models.Model):
paid = models.BooleanField(default=False)
amount = models.DecimalField()
def save(self, *args, **kwargs):
if not self.id:
pass
else:
this = ModelA.objects.get(id=self.id)
if this.paid != self.paid :
self.amount += 1
return super(ModelA, self).save(*args, **kwargs)