替代Django admin中任何外部包的默认文本标签

2024-09-30 22:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

<>太好了!p>

在bookshelf/apps.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/的包)时,有什么正确的方法可以覆盖此部分和其中的项的默认名称


Tags: appsdjangonamefrompyimportdefaultverbose
2条回答

假设你有这样一个模型:

class Stuff(models.Model):
    class Meta:
        verbose_name = u'The stuff'
        verbose_name_plural = u'The bunch of stuff'

你有详细的\u名称,但你想定制应用程序\u标签也不同的显示在管理。不幸的是,拥有一些任意的字符串(带空格)是不起作用的,而且它也不是用来显示的

原来管理员用的是app\u标签。title()用于显示,以便我们可以使用重写的title方法创建一个小hack: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'

伊奥尼尔的原始帖子https://blog.ionelmc.ro/2011/06/24/custom-app-names-in-the-django-admin/

作为docs say,新的应用程序应该避免默认的应用程序配置

不要将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中app config类的路径,而不是app name/default app config

INSTALLED_APPS = [
    ...
    'myproject.apps.MyThirdPartyConfig,
    ...
]

另一个例子参见文档的for application users部分

相关问题 更多 >