Сигналы Django не срабатывают при использовании только apps.py

Здесь я хочу создать Datalog, когда новый клиент создает аккаунт. Я хочу вызвать событие Datalog и сохранить соответствующую информацию в таблице Datalog.

apps.py (I could write in signals.py but I prefer to write it into directly app.py)

from django.db.models.signals import post_save, post_delete
from django.dispatch import receiver
from .models import DataLog

class LogAPIconfig(AppConfig):
     default_auto_field = 'django.db.models.BigAutoField'
     name = 'myapp'

     def ready(self):
        @receiver(post_save, sender=DataLog)
        def log_save_actioner(sender, created,instance, **kwargs):
            print("signal is sent to heatmap")
            action = 'create' if created else 'update'
            Datalog.objects.create(
                heatmap_type = instance.heatmap_type,
                status = instance.status,
                action = action,
                sender_table = sender.__name__,
                timestamp = instance.timestamp
            )

models.py

class Customer(models.Model):
        Customer_name = models.ForeignKey(User, unique=True, primary_key=True, related_name="Customer_name")
        Customer_type = models.CharField(max_length=255)

class Datalog(models.Model):
    Customer_name = models.ForeignKey(Customer, on_delete=models.CASCADE)
    status = models.CharField(max_length=255)
    comment = models.TextField(null=True, blank=True)
    followUpDate = models.DateTimeField(auto_now_add=True)
    class Meta:
        ordering = ['-followUpDate']

    def __str__(self):
        return str(self.status)

settings.py

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",
    "rest_framework.authtoken",
    "corsheaders",
    "django_auth_adfs",
    "django_filters",
    'myapp.apps.LogAPIconfig',

]

Когда я реализовал это, я получил следующее сообщение об ошибке в терминале

django.core.exceptions.AppRegistryNotReady: Приложения еще не загружены.

После некоторого поиска я думаю, что это в некоторой степени связано с импортом Datalog таблицы. Я хочу знать

  • Связано ли это с тем, что я не использую signals.py напрямую?
  • Кто должен быть sender?
  • Нужно ли мне использовать post_save.connect(log_save_actioner, sender=User) ?

заранее спасибо.

Вы импортируете свою модель слишком рано, чтобы Django смог правильно ее обработать. Попробуйте переместить 'from .models import DataLog' внутрь вашей ready(self) функции.

Вернуться на верх