Выполните действие, когда определенное поле изменяется в администраторе django. - PullRequest
0 голосов
/ 18 октября 2018

Мне было интересно, как сделать что-то для случая, подобного этому, скажем, у меня есть модель, подобная этой

class ModelA(models.Model):
    paid = models.BooleanField(default=False)
    amount = models.DecimalField()

, и вы хотите выполнить действие вроде добавления 1?на сумму, когда проверяется логическое поле.не первое сохранение, а последующее сохранение при изменении платного поля в админке, как это будет сделано?а сигналы пригодятся?можно ли сделать такой метод и добавить его к сигналу?

def test_stuff_change(instance, sender, *args, **kwargs):
    if paid == True:
    #what ever logic and statement goes in here

это можно сделать на полях изменений?

1 Ответ

0 голосов
/ 18 октября 2018
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...