这是Django Admin中描述模块的经典方式,效果非常好!
在书架/应用程序.py
from django.apps import AppConfig
class BOOKConfig(AppConfig):
name = 'bookshelf'
verbose_name = "Your Book"
在bookshelf/__init__.py
:
default_app_config = 'bookshelf.apps.BOOKConfig'
但是当您想要覆盖外部模块的标题时(例如https://djangopackages.org/),覆盖此部分的默认名称和其中的项目的正确方法是什么?
不要将default_app_config
添加到应用程序的__init__.py
中,只需使用INSTALLED_APPS
中应用程序配置的虚线路径即可。
INSTALLED_APPS = [
...
'bookshelf.apps.BOOKConfig'
...
]
对于第三方应用程序,你可以做同样的事情。在项目中的某个位置创建一个apps.py
(例如与myproject/settings.py
一起),并创建一个应用程序配置。
from third_party_app..apps import ThirdPartyConfig
class MyThirdPartyConfig(ThirdPartyConfig):
verbose_name = "Customized app name"
如果应用程序没有应用程序配置类,则使用AppConfig
子类并确保设置了name
。
from django.apps import AppConfig
class MyThirdPartyConfig(AppConfig):
name = 'third_party_app'
verbose_name = "Customized app name"
然后在INSTALLED_APPS
中使用应用配置类的路径,而不是应用名称/默认应用配置。
INSTALLED_APPS = [
...
'myproject.apps.MyThirdPartyConfig,
...
]
有关另一个示例,请参阅文档的"应用程序用户"部分。
假设您有一个这样的模型:
class Stuff(models.Model):
class Meta:
verbose_name = u'The stuff'
verbose_name_plural = u'The bunch of stuff'
您有verbose_name,但是您也想自定义app_label以在admin中进行不同的显示。不幸的是,有一些任意字符串(带空格)是不起作用的,而且无论如何都不能显示。
原来管理员使用的是app_label。title()显示,这样我们就可以用overriden-title方法进行一个小的破解:str子类:
class string_with_title(str):
def __new__(cls, value, title):
instance = str.__new__(cls, value)
instance._title = title
return instance
def title(self):
return self._title
__copy__ = lambda self: self
__deepcopy__ = lambda self, memodict: self
现在我们可以有这样的模型:
class Stuff(models.Model):
class Meta:
app_label = string_with_title("stuffapp", "The stuff box")
# 'stuffapp' is the name of the django app
verbose_name = 'The stuff'
verbose_name_plural = 'The bunch of stuff'
Ionel的原始帖子https://blog.ionelmc.ro/2011/06/24/custom-app-names-in-the-django-admin/
在我的Django管理界面中寻找重命名外部Django安装的应用程序/包的方法时,遇到了这个问题。我使用的是Django 3.2.16。下面是我如何完成的。
在使用外部安装的应用程序的包含应用程序的任何apps.py中,导入包应用程序。
from <package-name>.apps import <package-name>Config
然后,扩展verbose_name属性。
<package-name>Config.verbose_name = '<custom-name-here>'
希望这能帮助任何遇到这个问题的人!