10

прошелRemovedInDjango19Warning: Модель не объявляет явно app_label

Django 1.9 deprecation warnings app_label

, но ответы не могли исправить мою проблему, так что спрашивать снова.

У меня есть приложение, которое добавлено в INSTALLED_APPS в настройках.

когда-либо я бегу manage.py runserver, я получаю это предупреждение,

[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): 

код из моего приложения,

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 версии 1.8.2 на Python 2.7.8

+1

«* была импортирована до того был загружен его применение *»: Ваш 'импорт __init __ py'. 'signals.py', который импортирует' models.py'. Последнее, таким образом, происходит до того, как django регистрирует приложение, которое теперь устарело. Если вам нужны сигналы в отдельном приложении, попробуйте импортировать 'сигналы.py' из' models.py' или аналогичного. – dhke

ответ

15

Вы импортируете models.py до конфигурации приложения запуска.

Чтобы исправить это, вы можете импортировать и настраивать сигналы в методе CatalogConfig.ready.

так:

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') 
     ) 

вы можете проверить готов методу in documentation

16

Я испытал этот вопрос при выполнении тестов, и это было просто вопрос изменения:

from .models import MyModel 

в

from apps.myapp.models import MyModel 
+1

Это исправило мою проблему. но я не понимаю. Почему первый не работает? – whiteSkar

+0

@whiteSkar, вероятно, потому, что структура путалась с использованием относительного пути. Вместо этого использование абсолютного пути гарантирует правильность пути. Однако это не должно быть проблемой. – Cortifero

Смежные вопросы