Django 1.9 advertencias de desaprobación etiqueta de la aplicación


Acabo de actualizar a Django v1.8, y probar mi configuración local antes de actualizar mi proyecto y he tenido una advertencia de obsolescencia que nunca he visto antes, ni tiene ningún sentido para mí. Puede que esté pasando por alto algo o malinterpretando la documentación.

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:6: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Difficulty 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 Difficulty(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:21: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Zone 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 Zone(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:49: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Boss 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 Boss(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/raiding/models.py:79: RemovedInDjango19Warning: Model class ankylosguild.apps.raiding.models.Item 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 Item(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:14: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.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):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:36: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Comment 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 Comment(ScoreMixin, ProfileMixin, models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:64: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Forum 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 Forum(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:88: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.Post 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 Post(ScoreMixin, ProfileMixin, models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:119: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.CommentPoint 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 CommentPoint(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/forum/models.py:127: RemovedInDjango19Warning: Model class ankylosguild.apps.forum.models.TopicPoint 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 TopicPoint(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/auctionhouse/models.py:10: RemovedInDjango19Warning: Model class ankylosguild.apps.auctionhouse.models.Auction 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 Auction(models.Model):

/Users/neilhickman/Sites/guild/ankylosguild/apps/auctionhouse/models.py:83: RemovedInDjango19Warning: Model class ankylosguild.apps.auctionhouse.models.Bid 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 Bid(models.Model):

Ahora esto me plantea 3 preguntas.

  1. Según la documentación , Options.app_label no es un requisito a menos que el modelo esté fuera del módulo de aplicación, que en mi caso, no lo es. En segundo lugar, este comportamiento fue obsoleto en 1.7 de todos modos, así que ¿por qué es siquiera un problema?
  2. Las aplicaciones están todas en la tupla INSTALLED_APPS, así que seguramente no puede ser eso?
  3. ¿Por qué no se cargarían las aplicaciones antes de ser llamadas si todo está en la tupla INSTALLED_APPS?

Si realmente estoy haciendo algo mal, cuál es la forma correcta de hacerlo, ya que los documentos realmente no aclaran qué está causando este problema o cómo rectificarlo.

Author: Neil Ashley Hickman, 2015-04-14

12 answers

Como se indica en la advertencia, esto sucede :

  • Cuando estás usando un modelo que no está en un INSTALLED_APPS;
  • O cuando está utilizando un modelo antes de que se cargue su aplicación.

Dado que hizo referencia a la aplicación en la configuración INSTALLED_APPS, lo más probable es que esté utilizando un modelo antes de la inicialización de la aplicación.

Normalmente, esto ocurre cuando se tiene from .models import SomeModels en un apps.py señal temprana (por ejemplo post_migrate). En lugar de referir a sus modelos el clásico aquí, se recomienda usar AppConfig.get_model () . Compruebe su apps.py archivo para cualquier importación de modelo, y reemplácelos usando esta api.

Por ejemplo, en lugar de :

# apps.py

from django.apps import AppConfig
from .models import MyModel

def do_stuff(sender, **kwargs):
    MyModel.objects.get() # etc...

class MyAppConfig(AppConfig):
    name = 'src.my_app_label'

    def ready(self):
        post_migrate.connect(do_stuff, sender=self)

Haz esto:

# apps.py

from django.apps import AppConfig

def do_stuff(sender, **kwargs):
    mymodel = sender.get_model('MyModel')
    mymodel.objects.get() # etc...

class MyAppConfig(AppConfig):
    name = 'src.my_app_label'

    def ready(self):
        post_migrate.connect(do_stuff, sender=self)

Tenga en cuenta que esta aplicación se introdujo en bug #21719.

 49
Author: Antwan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-17 15:14:57

Error similar. En mi caso el error fue:

RemovedInDjango19Warning: Model class django.contrib.sites.models.Site 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 Site(models.Model):

Mi solución fue:

Añadido 'django.contrib.sites' a INSTALLED_APPS

 50
Author: WayBehind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 16:57:34

Sospecho que será solo una pequeña minoría de personas que ven este error para quienes será causado por lo mismo que yo, pero en caso de que ayude a alguien más, ¡parece que vale la pena agregar esta respuesta!

De repente vi muchos de estos errores al ejecutar pruebas en un punto - resultó que accidentalmente había creado un __init__.py en el nivel superior de mi proyecto Django cuando estaba destinado a estar en un subdirectorio. La pista de que esto estaba sucediendo es que los errores, que eran como:

/home/mark/mystupiddjangoproject/alerts/models.py:15: RemovedInDjango19Warning: Model class mystupiddjangoproject.alerts.models.Alert 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 Alert(models.Model):

... se incluyó el nombre del directorio en el que se encuentra el proyecto (mystupiddjangoproject) en el nombre del modelo completo, que debería haber sido: alerts.models.Alert.

Para arreglar esto, solo necesitaba hacer:

rm __init__.py
rm __init__.pyc
 23
Author: Mark Longair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-08 10:31:57

Estaba recibiendo un error similar, pero en lugar de quejarme de los modelos en mis aplicaciones, se quejaba de los modelos en paquetes contrib. Por ejemplo:

C:\Program Files\Python 2.7\lib\site-packages \ django \ contrib \ sessions \ models. py: 27: RemovedInDjango19Warning: Model class django.contrib.sesion.modelo.Session no declara una app_label explícita y, o bien no está en una aplicación en INSTALLED_APPS o bien se importó antes de que se cargara su aplicación. Esto no ya sea compatible con Django 1.9. sesión de clase (modelos.Modelo):

Esto es causado por un mal orden en la propiedad INSTALLED_APPS en settings.py. Mi settings.py inicialmente contenía:

INSTALLED_APPS = (
    'my_app_1',
    'my_app_2',
    'my_app_3',
    'bootstrap_admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'social.apps.django_app.default',
    'mathfilters',
    'rest_framework',
)

my_app_* utilice modelos de los paquetes contrib. El error es causado por usar modelos antes de declararlos (es decir, Django debe saber acerca de las aplicaciones que contienen esos modelos antes de usarlos).

Para resolver esto, el orden en el que se declaran las aplicaciones debe cambiarse. Específicamente, todas las aplicaciones de Django deben ir antes que las aplicaciones definidas por el usuario. En mi caso, el INSTALLED_APPS correcto se vería como:

INSTALLED_APPS = (
    'bootstrap_admin',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.messages',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.staticfiles',
    'social.apps.django_app.default',
    'mathfilters',
    'rest_framework',
    'my_app_1',
    'my_app_2',
    'my_app_3',
)

Ahora sé que esto podría no responder directamente a su pregunta, pero responde a una relacionada, y ya que este es el único enlace que se muestra en Google al pegar el error, lo he respondido aquí.

Sin embargo, creo que una situación similar está causando su problema:

Asegúrese de declarar las aplicaciones de" dependencia" antes de las aplicaciones que los utilizan! Los errores realmente no especifican qué aplicación está utilizando un modelo, por lo que tendría que empujar la aplicación que contiene el modelo que menciona a la parte superior, uno por uno, hasta que el error desaparezca.

 9
Author: Vlad Schnakovszki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-30 09:38:26

Agregue una meta clase a su modelo con un atributo app_label.

class Meta:
    app_label = 'app_model_belongs_to'

Espero que esto funcione!

EDITAR: La razón de esto es generalmente que el modelo existe fuera de las ubicaciones estándar.

Para obtener más información, consulte: https://docs.djangoproject.com/en/1.8/ref/models/options/#app-label

 7
Author: Justin Ober,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-16 20:07:39

También me enfrenté a este problema y estaba relacionado con la forma en que estaba cargando el signals.py módulo desde una aplicación.

Como puede que ahora, es bastante común tener problemas de importación circular entre las señales y los modelos, y es habitual importarlos desde el archivo __init__.py de la aplicación o desde la parte inferior del archivo models.py para evitarlos.

Bueno, estaba usando el enfoque __init__.py, y solo moviendo la instrucción import signals al final de mi archivo models.py resolví la issue .

Espero que esto ayude a alguien más!

 5
Author: Caumons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-18 08:43:40

Yo tenía el mismo problema. Pongo un punto de interrupción en django. db.models.base.py:line82 e intento averiguar qué está causando este mensaje de advertencia.

# Look for an application configuration to attach the model to.
app_config = apps.get_containing_app_config(module)

Básicamente, si su aplicación no existe en este momento, recibe esa advertencia. Me di cuenta de que mi problema era que tengo un framework de terceros (en mi caso, haystack) que intenta importar uno de mis modelos personalizados.

Tal vez también tenga un paquete de terceros listado en INSTALLED_APPS antes de sus aplicaciones personalizadas y su tercero ¿el paquete hace referencia a sus aplicaciones personalizadas? Esto sería posible si está utilizando algo como Django rest framework también.

 4
Author: Anthony Choi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-28 23:58:17

La forma de Django 1.9 de manejar esto y darle a tu aplicación un buen nombre en el administrador es hacer lo siguiente:

Agregue un archivo en su aplicación llamado apps.py y agregue lo siguiente:

#apps.py
from django.apps import AppConfig


class YourAppNameAppConfig(AppConfig):
    name = 'yourappname'
    verbose_name = 'Your App Name Looking Right'

Luego, en el archivo __init__.py de tu app, agrega lo siguiente:

#__init__.py    
default_app_config = 'youappname.apps.YourAppNameAppConfig'
 4
Author: NathanQ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-17 22:30:58

Tengo este problema después de actualizar Django de 1.8 a 1.9.1:

RuntimeError at /

Blog de la clase modelo.modelo.BlogCategory no declara una app_label explícita y no está en una aplicación en INSTALLED_APPS.

Esta ayuda para resolver:

En blog/models.py:

class BlogCategory(models.Model):
    some vars & methods

    class Meta:
        app_label = 'BlogCategory'

Es trabajo en 100%.

 4
Author: Роман Арсеньев,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-11 14:54:48

A veces un inválido .los archivos pyc que no coinciden con el código fuente actual causaron este problema.

Eliminé todo .pyc para actualizar todos ellos usando este bash

find . -name "*.pyc" -exec rm -rf {} \;

 2
Author: Michael Henry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-13 15:40:45

La forma más fácil y sencilla de resolver esto es colocar el comando "importar señales" en la PARTE INFERIOR del archivo de modelo con el que está trabajando. Esto garantiza que todos los modelos se carguen antes de que se importen las señales para ese modelo. Tendría que hacer esto para cada modelo que está importando (si utiliza receptores vinculados a modelos particulares), o en el models.py para la aplicación que viene al final de la" aplicaciones instaladas " en su configuración.

Las otras soluciones solo son necesarias si está tratando con señales de tipo no modelo, donde los modelos nunca se importarán primero.

Por qué esto no se señala en los documentos es un misterio, porque acabo de quedar atrapado por ella, hasta que recordé que tienes que hacer eso.

Models.py

from django.db import models

class MyModel(models.Model):
    myfield1 = models.CharField()
    myfield2 = models.CharField()

import signals

Y luego en signals.py:

from django.db.models.signals import pre_save # Or whatever you are using
from django.dispatch import receiver

from .models import MyModel

@receiver(pre_save, sender=MyModel)
def my_receiver(sender, instance, **kwargs):
    mysender = sender
    print mysender

Así.

 1
Author: MontyThreeCard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-29 23:23:46

No recibí ningún error en django 1.7. Al migrar a django 1.8 obtuve este error. La razón fue que la señal se definió en app/signal_receiver.py.

He creado un apps.py

from django.apps import AppConfig

class TasksConfig(AppConfig):
    name = 'core'
    verbose_name = "core"

    def ready(self):
        import core.signal.handler

Moví el receptor de señal en handler.py dentro del paquete de señal.

 0
Author: Netro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-22 09:29:36