10

durchRemovedInDjango19Warning: Modell nicht erklärt keine expliziten app_label

gegangen sind

Django 1.9 deprecation warnings app_label

aber Antworten können nicht mein Problem beheben, so wieder zu fragen.

Ich habe eine App, die INSTALLED_APPS in den Einstellungen hinzugefügt wird.

, wann immer ich manage.py runserver laufen lasse, erhalte ich diese Warnung,

[trimmed path to project]/catalog/models.py:9: RemovedInDjango19Warning: Model class catalog.models.Category 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. This will no longer be supported in Django 1.9. 
    class Category(models.Model): 

Der Code von meiner app,

signals.py

from django.db.models.signals import post_save 
from django.dispatch import receiver 
from models import Category 

@receiver(post_save, sender=Category) 
def someSignal(sender, **kwargs): 
    pass 

apps.py

from django.apps import AppConfig 

class CatalogConfig(AppConfig): 
    name = 'catalog' 
    verbose_name = 'Catalogue' 

init.py

import signals 

default_app_config = 'catalog.apps.WhosConfig' 

Django Version 1.8.2 auf Python 2.7.8

+1

„* importiert wurde vor seiner Anwendung * geladen wurde“. Ihre '__init __ py' Importe 'signals.py', die' models.py' importiert. Letzteres geschieht also, bevor django die App, die jetzt veraltet ist, registriert. Wenn Sie die Signale in einer separaten App haben möchten, versuchen Sie, 'signals.py' aus' models.py' oder ähnlichem zu importieren. – dhke

Antwort

15

Sie importieren models.py vor App-Konfiguration laufen.

Um es zu beheben, können Sie Signale in CatalogConfig.ready Methode importieren und konfigurieren.

wie folgt aus:

signals.py

def someSignal(sender, **kwargs): 
    pass 

apps.py

from django.apps import AppConfig 
from django.db.models.signals import post_save 


class CatalogConfig(AppConfig): 
    name = 'catalog' 
    verbose_name = 'Catalogue' 

    def ready(self): 
     from .signals import someSignal 
     post_save.connect(
      receiver=someSignal, 
      sender=self.get_model('Category') 
     ) 

Sie bereit Methode überprüfen möchten können in documentation

16

ich dieses Problem erlebt, wenn Tests laufen und es war nur eine Frage der Veränderung:

from .models import MyModel 

zu

from apps.myapp.models import MyModel 
+1

Das behebt mein Problem. aber ich verstehe es nicht. Warum funktioniert der erste nicht? – whiteSkar

+0

@whiteSkar wahrscheinlich, weil das Framework mit einem relativen Pfad verwirrt wurde. Stattdessen garantiert die Verwendung eines absoluten Pfades die Gültigkeit des Pfades. Dies sollte jedoch kein Problem sein. – Cortifero