2 回答
TA贡献1829条经验 获得超6个赞
假设你有一个这样的模型:
class Stuff(models.Model):
class Meta:
verbose_name = u'The stuff'
verbose_name_plural = u'The bunch of stuff'
您有verbose_name,但是您也想为admin 中的不同显示自定义app_label。不幸的是,有一些任意字符串(带空格)不起作用,无论如何它都不用于显示。
原来管理员使用 app_label。title () 用于显示,所以我们可以做一个小技巧:str 子类,带有覆盖的 title 方法:
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/
TA贡献2003条经验 获得超2个赞
正如文档所说,新应用程序应避免使用 default_app_config。
而不是添加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"
如果应用程序没有 App Config 类,则创建子类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,
...
]
有关另一个示例,请参阅文档的应用程序用户部分。
添加回答
举报