[英]Django app_label is wrong on models
我有一個 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
我看到myApp1
或myApp2
而不是apps.myApp1
&& apps.myApp2
。 甚至在遷移模型中,模型被稱為myApp1.Model
或myApp2.Model
而不是apps.myApp1.Model
或apps.myApp2.Model
此外,指定AppConfig
。
from django.apps import AppConfig
class AppOneConfig(AppConfig):
name = 'apps.myApp1'
verbose_name = 'My App One'
這是預期的嗎? 我對 Django 很陌生。 任何人都可以建議錯誤是什么?
這是預期的嗎?
是的,這是預期的。 默認情況下,應用程序標簽使用“python 路徑”的最后一部分。 您可以通過在AppConfig
[Django-doc] 中指定它來更改它。 這個AppConfig
的.label
屬性 [Django-doc]決定了應用程序標簽,並且:
(...) 它默認為
name
的最后一個組件。 它應該是一個有效的 Python 標識符。 (…)
現在.name
屬性 [Django-doc] ,這是:
應用程序的完整 Python 路徑,例如
'django.contrib.admin'
。
您可以通過首先在myApp1
目錄的__init__.py
文件中指定AppConfig
來指定它:
# apps/myApp/__init__.py
default_app_config = 'apps.myApp.apps.App1Config'
然后你在myApp1
目錄下創建一個文件apps.py
,並寫:
# apps/myApp/apps.py
from django.apps import AppConfig
class App1Config(AppConfig):
label = 'apps_myapp1'
注意:通常目錄使用
slug_case
,所以我認為將myApp1
重命名為myapp1
或my_app1
可能會更好。
編輯:因此,您需要將AppOneConfig
的label
屬性設置為:
class AppOneConfig(AppConfig):
name = 'apps.myApp1'
label = 'apps_myapp1'
verbose_name = 'My App One'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.