2016-04-13 23 views
5

Perché ottengo questa eccezione?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. 

succede solo se chiamo l'unittest via PyCharm, non se uso py.test sul guscio.

Immagino che reverse_lazy() non sia pigro qui, poiché viene utilizzato in format_html(). Un modo per avere un pigro format_html()?

Versioni:

  • Django 1.8
  • PyCharm 5.0.4
+0

Non sono sicuro, ma ho il sospetto PyCharm potrebbe non essere chiamando Django prova corridore correttamente. Django ha bisogno di un sacco di cose perché i test possano funzionare correttamente, i modelli devono essere caricati, i pattern URL analizzati ecc. Per questo motivo Django usa un comando di gestione 'manage.py test' per eseguire i test. È possibile che PyCharm non ne sia a conoscenza. –

+0

Si ottiene lo stesso errore esatto se si esegue il server di sviluppo tramite PyCharm? – alecxe

+0

Anche quali versioni di PyCharm e Django stai usando? Grazie. – alecxe

risposta

1

Poiché ci sono cose come url_patterns nello stacktrace, presumo che DJANGO_SETTINGS_MODULE sia impostato correttamente.

Tuttavia, è comunque necessario chiamare django.setup() prima di eseguire qualsiasi altra operazione.

import django 
django.setup() 

Per me, questo messaggio di errore è andato via.

0

ho avuto qualche problema con PyCharm, me stesso, e si suppone che si sta utilizzando la comunità edizione (che ho usato).

In tal caso, è molto probabile che il problema non sia configurato correttamente per django. Probabilmente puoi risolvere il problema con alcuni hack che potrebbero funzionare per questo.

Mi piacerebbe iniziare con this. (Django importazione al fine di garantire la console Django viene eseguito)

Allora forse this.

c'è anche questo: controllo "Modifica configurazioni" sotto il test di sei in esecuzione e aggiungere DJANGO_SETTINGS_MODULE=<app-name-here>.settings alle variabili di ambiente.

0

Se tutto quanto sopra non riesce, tentare l'inizializzazione il modulo e fare l'importazione nel costruttore:

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) 

L'errore può essere causato da l'esatta import sequenza di svolta dai diversi corridori prova e la Infatti, per personalizzare il modulo, si utilizzano solo le variabili di classe .