2016-07-10 3 views
0

In meiner django Anwendung habe ich nächsten Code in apps.py Datei:Datenbank kann nicht erstellt werden, während in AppConfig ein Init-Skript vorhanden ist. django.db.utils.OperationalError: keine solche Tabelle

class NewsConfig(AppConfig): 
    name = 'app_news' 

    def ready(self): 
     super().ready() 
     from service.cache import cache 
     cache.init_cache() 

Zweck der init_cache Methode ist es, Daten aus der Datenbank zu laden Cache Redis. Code:

def init_cache(): 
    from app_news.models import News 
    for news in News.objects.all().order_by('-pk'): 
     do_some_logic(news) 

Wenn ich Datenbank mit manage.py migrate Befehl erstellen bin versucht, erhalte ich nächste Fehler:

django.db.utils.OperationalError: no such table: app_news_news

Soweit ich verstehe, migrate lädt alle Anwendungen und rufen ready Methode von AppConfig, so kann ich keine Datenbank erstellen.

Vielleicht gibt es eine Umgehungslösung?

Antwort

0

Sie sollten tun Abfragen in ready Verfahren vermeiden, wie es hier erwähnt worden ist: https://docs.djangoproject.com/en/1.9/ref/applications/#django.apps.AppConfig.ready

Vielleicht können Sie woanders Ihre init_cache Methode aufrufen, wie, wsgi.py oder urls.py so von allen Management-Befehle nicht aufgerufen wird.

+1

Danke! Aber ich denke nicht, dass die Cache-Initialisierung in "urls.py" sein sollte. Meiner Meinung nach - das ist nicht offensichtlich. – parikLS

Verwandte Themen