Reputation: 4461
I'm trying to learn signals. In the apps.py below there is a couple of commented lines. As soon as I uncomment from .models import ReceiverModel, SenderModel, I get django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Could you help me understand what I am doing wrongly?
demo_signals/my_app/models.py
from django.db import models
from django.dispatch import receiver
from django.db.models.signals import post_save
class SenderModel(models.Model):
pass
class ReceiverModel(models.Model):
pass
@receiver(post_save, sender=SenderModel)
def my_callback(self, sender, **kwargs):
print("Saving finished!")
demo_signals/demo_signals/settings.py
INSTALLED_APPS = [
...
'my_app.apps.MyAppConfig',
]
demo_signals/my_app/apps.py
from django.apps import AppConfig
from django.db.models.signals import Signal
#from .models import ReceiverModel, SenderModel
class MyAppConfig(AppConfig):
name = 'my_app'
def ready(self):
print("Here")
#Signal.connect(self, ReceiverModel, SenderModel)
Some part of the traceback
File "/home/michael/workspace/demo_signals/my_app/apps.py", line 3, in <module>
from .models import ReceiverModel, SenderModel
File "/home/michael/workspace/demo_signals/my_app/models.py", line 5, in <module>
class SenderModel(models.Model):
File "/home/michael/workspace/PhotoArchive/venv/lib/python3.5/site-packages/django/db/models/base.py", line 94, in __new__
app_config = apps.get_containing_app_config(module)
File "/home/michael/workspace/PhotoArchive/venv/lib/python3.5/site-packages/django/apps/registry.py", line 240, in get_containing_app_config
self.check_apps_ready()
File "/home/michael/workspace/PhotoArchive/venv/lib/python3.5/site-packages/django/apps/registry.py", line 125, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
Upvotes: 2
Views: 682
Reputation: 6767
As per the docs, you can't import your models that way in your AppConfig
, instead you need to do:
class MyAppConfig(AppConfig):
name = 'my_app'
def ready(self):
ReceiverModel = self.get_model('ReceiverModel')
SenderModel = self.get_model('SenderModel')
Signal.connect(self, ReceiverModel, SenderModel)
Upvotes: 1