首页 > 解决方案 > 模型上的 Django app_label 错误

问题描述

我有一个 Django DRF 应用程序。这是我的项目结构。

myproject/
    myproject/
    apps/
        myApp1/
            __init__.py
            apps.py
            admin.py
            models.py
            urls.py
            views.py
        myApp2/
        __init__.py
    static/
    manage.py

我的INSTALLED_APPS包含:

INSTALLED_APPS = [
    'apps.myApp1.apps.AppOneConfig',
    'apps.myApp2.apps.AppTwoConfig',
]

当我去./manage.py shell_plus跑步时:

SomeModel._meta.label

我看到myApp1ormyApp2而不是apps.myApp1&& apps.myApp2。即使在迁移中,模型也被称为myApp1.ModelmyApp2.Model不被称为apps.myApp1.Modelapps.myApp2.Model

此外,指定AppConfig.

from django.apps import AppConfig


class AppOneConfig(AppConfig):
    name = 'apps.myApp1'
    verbose_name = 'My App One'


这是预期的吗?我对 Django 很陌生。谁能提出错误是什么?

标签: djangodjango-modelsdjango-rest-framework

解决方案


这是预期的吗?

的,这是意料之中的。默认情况下,应用标签使用“python 路径”的最后一部分。您可以通过在AppConfig[Django-doc]中指定它来更改它。它的.label属性 [Django-doc]AppConfig决定了应用程序标签,并且:

(...) 它默认为name. 它应该是一个有效的 Python 标识符。(……)

现在.name属性 [Django-doc],这是:

应用程序的完整 Python 路径,例如'django.contrib.admin'.

AppConfig您可以通过首先在目录的__init__.py文件中指定 来指定myApp1

# apps/myApp/__init__.py

default_app_config = 'apps.myApp.apps.App1Config'

然后apps.pymyApp1目录中创建一个文件,然后写入:

# apps/myApp/apps.py

from django.apps import AppConfig

class App1Config(AppConfig):
    label = 'apps_myapp1'

注意:通常目录使用slug_case,所以我认为将您重命名myApp1myapp1or可能会更好my_app1

编辑:因此,您需要将label您的属性设置AppOneConfig为:

class AppOneConfig(AppConfig):
    name = 'apps.myApp1'
    label = 'apps_myapp1'
    verbose_name = 'My App One'

推荐阅读