2016-04-13 6 views
5

Warum bekomme ich diese Ausnahme?AppRegistryNotReady: Lazy format_html()?

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. 

Es geschieht nur, wenn ich den Unittest über PyCharm nennen, nicht, wenn ich auf dem Shell verwenden py.test.

Ich denke, reverse_lazy() ist hier nicht faul, da es in format_html() verwendet wird. Irgendeine Möglichkeit, einen faulen format_html() zu haben?

Versionen:

  • Django 1.8
  • PyCharm 5.0.4
+0

Nicht sicher, aber ich vermute PyCharm vielleicht nicht Django Test Runner richtig anrufen. Django braucht eine Menge Dinge, damit die Tests korrekt laufen, Modelle geladen werden müssen, URL-Muster analysiert werden müssen. Aus diesem Grund verwendet Django einen Verwaltungsbefehl 'manage.py test', um Tests auszuführen. Es ist möglich, dass PyCharm sich dessen nicht bewusst ist. –

+0

Erhalten Sie den gleichen genauen Fehler, wenn Sie den Entwicklungsserver über PyCharm ausführen? – alecxe

+0

Auch welche PyCharm und Django Versionen verwendest du? Vielen Dank. – alecxe

Antwort

1

Da es Dinge wie url_patterns im Stacktrace gibt, gehe ich davon aus, dass DJANGO_SETTINGS_MODULE korrekt eingestellt ist.

Sie müssen jedoch noch django.setup() aufrufen, bevor Sie etwas anderes ausführen.

import django 
django.setup() 

Für mich, die diese Fehlermeldung gemacht weggehen.

0

ich einige Probleme mit PyCharm hätte, mich selbst, und ich nehme an, Sie die Community verwenden Ausgabe (die ich benutzt habe).

Wenn ja, ist das Problem sehr wahrscheinlich, dass Sie nicht richtig für Django konfiguriert sind. Sie können das wahrscheinlich mit einigen Hacks beheben, die dafür funktionieren könnten.

würde ich mit this. beginnen (Import django die django-Konsole, um sicherzustellen, laufen)

Dann vielleicht this.

Es gibt auch diese: Check „Konfigurationen bearbeiten“ unter dem Test du bist ausgeführt werden und Umgebungsvariablen DJANGO_SETTINGS_MODULE=<app-name-here>.settings hinzufügen.

0

Wenn alle oben genannten fehlschlägt, versuchen Sie, Ihre Form zu initialisieren und den Import in den Konstruktor zu tun:

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) 

Der Fehler durch die genaue import Sequenz kann von den verschiedenen Test Läufer durchgeführt verursacht werden und die Tatsache, dass Sie nur Klassenvariablen verwenden, um Ihr Formular anzupassen.