метод сигнала pre_save вызывается после метода сохранения модели - PullRequest
1 голос
/ 20 апреля 2020

Я использую сигнал pre_save для выполнения некоторых функций, но когда я использовал операторы print для печати журнала, я обнаружил, что метод сохранения моей модели вызывается перед связанным методом pre_save, из того, что, как я знаю, метод pre_save должен вызываться раньше Я публикую свою часть своего кода для справки:

Models.py:

class RedeemCode(models.Model):
    code = models.CharField(max_length=128)
    reward = models.ForeignKey(Reward, on_delete=models.CASCADE)
    is_active = models.BooleanField(default = True)

    class Meta:
        unique_together = ['code']

    def save(self, **kwargs):
        print("In model save method")
        super().save(**kwargs)

в Views.py мой метод pre_save:

@receiver(pre_save,sender=RedeemCode)
def send_noti(sender, instance, **kwargs):
    print("Pre_save Method called ----->",instance)

Когда Я добавляю новые значения из панели администратора и отправляю его. Метод сохранения модели называется Сначала он печатает In model save method, а затем вызывается связанный метод pre_save, поэтому вывод выглядит так:

In model save method
Pre_save Method called

Из моего понимания не следует ли сначала вызывать связанный метод pre_save, а затем сохранять метод Model, и результат должен быть таким:

Pre_save Method called
In model save method

Я не понимаю, что происходит, может кто-нибудь объяснить, почему это происходит? или если я что-то делаю не так, заранее спасибо :))

1 Ответ

1 голос
/ 21 апреля 2020

Я выяснил причину, по которой это происходило, потому что связанный метод pre_save вызывается перед методом super().save(), по-видимому, сигнализирует о привязке к методу сохранения модели, а не к тому, который мы переопределяем, поэтому они выполняются непосредственно перед или после того, как метод сохранения модели по умолчанию вызывается с использованием super(), поэтому, если я комментирую super().save(), метод pre_save или post_save не вызывается.

...