#26023 closed Bug (invalid)
Importing GenericForeignKey on Django 1.9
Reported by: | Chris Mitchell | Owned by: | nobody |
---|---|---|---|
Component: | contrib.contenttypes | Version: | 1.9 |
Severity: | Normal | Keywords: | generic foreign keys |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
It appears it is not possible to import GenericForeignKey from outside a live Django project in 1.9. To reproduce this error:
from django.conf import settings settings.configure() from django.contrib.contenttypes.fields import GenericForeignKey
Produces:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/contrib/contenttypes/fields.py", line 5, in <module> from django.contrib.contenttypes.models import ContentType File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 159, in <module> class ContentType(models.Model): File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/db/models/base.py", line 94, in __new__ app_config = apps.get_containing_app_config(module) File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/apps/registry.py", line 239, in get_containing_app_config self.check_apps_ready() File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready raise AppRegistryNotReady("Apps aren't loaded yet.") django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
This seems to be occurring because ModelBase is attempting to get the app config, but the configuration step has not occurred.
Change History (6)
comment:1 by , 9 years ago
comment:2 by , 9 years ago
Description: | modified (diff) |
---|
comment:3 by , 9 years ago
The case is for the app Wooey and this issue.
We have an option that bootstraps the installation process which entails setting up Django project with pre-determined settings. For compatibility with older versions of Django, there is a compatibility shim to handle cases like GFK's import location being changed and the template engine's get_string method. So at the onset, there is no INSTALLED_APPS. It's a python script importing GFK. I could move these imports to another shim (or do some other workarounds) but this approach works in other Django versions -- although it could entirely be fortunate this behavior was not flagged.
comment:4 by , 9 years ago
I'm not sure about fixing the issue in general, but in that case I'd suggest dropping compatibility with Django < 1.8 since those versions are unsupported.
comment:5 by , 9 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
You must call django.setup()
as highlighted in the 1.7 release notes.
https://docs.djangoproject.com/en/1.7/releases/1.7/#standalone-scripts
comment:6 by , 9 years ago
An additional error arises for that case:
>>> from django.conf import settings >>> settings.configure() >>> import django >>> django.setup() >>> from django.contrib.contenttypes.fields import GenericForeignKey Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/contrib/contenttypes/fields.py", line 5, in <module> from django.contrib.contenttypes.models import ContentType File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 159, in <module> class ContentType(models.Model): File "/home/chris/.virtualenvs/wooey/local/lib/python2.7/site-packages/django/db/models/base.py", line 103, in __new__ "application was loaded. " % (module, name)) RuntimeError: Model class django.contrib.contenttypes.models.ContentType doesn't declare an explicit app_label and either isn't in an application in INSTALLED_APPS or else was imported before its application was loaded
I understand this isn't a normal situation. But should importing the GFK field really cause the application loading logic to execute?
Could you clarify the use case? You need to have
django.contrib.contentypes
inINSTALLED_APPS
, I believe.