Сигналы 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)
функции.