Как выполнить действие только после создания экземпляра
мой код:
def save(self, *args, **kwargs):
<My_CODE>
if <having_register>:
<send_email_to_admin>
но эта функция будет работать, когда я запускаю экземпляр обновления (параметры 'force_insert' и 'force_update' могут быть использованы, чтобы настоять на том, что "сохранение" должно быть SQL вставкой или обновлением). Так что если я просто хочу отправить письмо администратору только после новой регистрации? Есть ли способ проверить метод запроса или предотвратить force_insert в этом случае?
Вы можете проверить значение pk:
def save(self, *args, **kwargs):
<My_CODE>
if self.pk is None:
<send_email_to_admin>
Иначе вы могли бы отправить письмо в представлении после вызова save
.
Другой способ решения этой проблемы - использование сигналов django и использование сигнала post_save и проверка параметра created
. Хорошим примером для сигналов django может быть вот этот здесь, он показывает настройку, необходимую для работы сигналов django.
from django.db.models.signals import post_save
from django.dispatch import receiver
from yourApp.models import yourModel
@receiver(post_save, sender=yourModel)
def new_instance_created(sender, instance, created, **kwargs):
if created:
<send_email_to_admin>