我在模块的__init__.py中声明了快捷功能,以简化导入,即。
from app.logger import log
而不是:
from app.logger.shortcuts import log
这个函数原则上是一个类对象,用这种方式像单例一样使用:
# __init_.py
from app.logger.backends import LogDatabaseBackend
log = LogDatabaseBackend()
在backends.py中我需要以这种方式导入一些模型:
# backends.py
from app.logger.models import Model1, Model2
class LogDatabaseBackend(object):
...
这些模型在LogDatabaseBackend的某些方法中是必需的。问题是Django会显示警告:
“RemovedInDjango19Warning:模型类app.logger.models.Model1没有声明显式的app_label,也没有在INSTALLED_APPS的应用程序中,或者在加载应用程序之前导入了.Digango将不再支持1.9“。
我认为原因是在加载app之前在init中导入模型。我应该如何更改代码以避免这些警告并保持Django 1.9兼容性?
答案 0 :(得分:0)
在<app_name>.apps.py
中定义应用程序配置:
来自Application Configuration
文档:
应用程序配置对象存储应用程序的元数据。 可以在AppConfig子类中配置某些属性。其他人是 由Django设置并且只读。
以下是documentation:
中的示例# rock_n_roll/apps.py
from django.apps import AppConfig
class RockNRollConfig(AppConfig):
name = 'rock_n_roll'
verbose_name = "Rock ’n’ roll"
默认情况下,您可以使应用程序加载此AppConfig子类 如下:
# rock_n_roll/__init__.py
default_app_config = 'rock_n_roll.apps.RockNRollConfig'
这会导致在
RockNRollConfig
时使用INSTALLED_APPS
包含'rock_n_roll'
。这样您就可以使用AppConfig
功能,无需用户更新INSTALLED_APPS
设置。除了这个用例,最好避免使用default_app_config
而是指定应用程序配置类INSTALLED_APPS
,如下所述。
答案 1 :(得分:0)
如果Model1
和Model2
与ForeignKey
一起使用,则您无需导入它们。而是使用ForeignKey("app.Model1", ...)
。这延迟了导入到app注册表之后。否则,请考虑使用功能级别导入。