Как выполнить действие только после создания экземпляра

мой код:

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>
        
Вернуться на верх