Why do I get this exception?
Traceback (most recent call last): File "/path1/myapp-isu/myapp_isu/tests/unit/views/test_view_isu.py", line 8, in <module> from myapp_isu.search_form import ISUSearchForm File "/path1/myapp-isu/myapp_isu/search_form.py", line 87, in <module> class ISUSearchForm(forms.Form): File "/path1/myapp-isu/myapp_isu/search_form.py", line 108, in ISUSearchForm foo_filter=forms.ModelChoiceField(FooFilter.objects.all(), label=format_html('<a href="%s">%s</a>', reverse_lazy('foo-filter'), FooFilter._meta.verbose_name)) File "/path1/dt/dt/utils/templateutils.py", line 127, in reverse return urlresolvers.reverse(*args, **kwargs) File "/path1/dt/dt/utils/urlresolverutils.py", line 49, in patched_reverse base_url = orig_reverse(viewname, urlconf=urlconf, args=args, kwargs=kwargs, prefix=prefix, current_app=current_app) File "/path2/django/core/urlresolvers.py", line 578, in reverse return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))) File "/path2/django/core/urlresolvers.py", line 432, in _reverse_with_prefix self._populate() File "/path2/django/core/urlresolvers.py", line 284, in _populate for pattern in reversed(self.url_patterns): File "/path2/django/core/urlresolvers.py", line 401, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/path2/django/core/urlresolvers.py", line 395, in urlconf_module self._urlconf_module = import_module(self.urlconf_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) File "/path1/myapp-eins/myapp_eins/etc/rooturls.py", line 13, in <module> admin.autodiscover() File "/path2/django/contrib/admin/__init__.py", line 24, in autodiscover autodiscover_modules('admin', register_to=site) File "/path2/django/utils/module_loading.py", line 67, in autodiscover_modules for app_config in apps.get_app_configs(): File "/path2/django/apps/registry.py", line 137, in get_app_configs self.check_apps_ready() File "/path2/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.
It only happens if I call the unittest via PyCharm, not if I use py.test on the shell.
I guess reverse_lazy()
is not lazy here, since it gets used in format_html()
. Any way to have a lazy format_html()
?
Versions:
- Django 1.8
- Pycharm 5.0.4
3 Answers
Answers 1
Since there are things like url_patterns in the stacktrace, I assume that DJANGO_SETTINGS_MODULE
is set correctly .
But, you still need to call django.setup()
before running anything else.
import django django.setup()
For me, that made this error message go away.
Answers 2
I've had some trouble using PyCharm, myself, and I'll assume you're using the the community edition (which I've been using).
If so, the problem is very likely that you're not properly configured for django. You can probably fix this with some hacks that might work for this.
I'd start off with this. (importing django to ensure the django console is run)
Then maybe this.
There's also this: Check "Edit Configurations" under the test you're running, and add DJANGO_SETTINGS_MODULE=<app-name-here>.settings
to environment variables.
Answers 3
If all of the above fails, try initializing your form and doing the import in the constructor:
class ISUSearchForm(...): ... foo_filter = forms.Field() ... def __init__(*args, **kwargs) from ... import reverse_lazy from ... import FooFilter self.fields['foo_filter'] = \ forms.ModelChoiceField( FooFilter.objects.all(), label=format_html( '<a href="%s">%s</a>', reverse_lazy('foo-filter'), FooFilter._meta.verbose_name ) ) super().__init__(*args, **kwargs)
The error may be caused by the exact import
sequence performed by the different test runners and the fact that you use only class variables to customize your form.
0 comments:
Post a Comment