下午好!我正在使用verbose_name_plural动态字段在管理面板中显示一些最新的信息。Django版本: 4.1模型如下所示:
from django.utils.functional import lazy
from django.utils.translation import gettext_lazy as _
class Post(models.Model):
# ...
class Meta:
verbose_name = 'Post'
verbose_name_plural = lazy(lambda: _('Posts ({})').format(Post.....count()), str)()我不记得我在哪里找到了这个选项来显示一些信息,但它非常有用,只是每次运行值更改和创建迁移的命令时,我都会得到如下内容:
from django.db import migrations
class Migration(migrations.Migration):
operations = [
migrations.AlterModelOptions(
name='post',
options={'verbose_name': 'Post', 'verbose_name_plural': 'Posts (123)'},
),
]我找到了这个选项:https://stackoverflow.com/a/39801321/2166371,但我不知道它有多重要,以及为什么没有使用的类被导入到那里
发布于 2022-09-28 09:38:32
基于0sVoid建议的变体,我实现了一个稍微不同的版本,它似乎没有问题。
最初,建议更改管理面板(_build_app_dict)的主类中的一种方法:https://stackoverflow.com/a/71740645/2166371
但是这个方法中有太多的代码我不想重写
我重写了另一个方法get_app_list
家长法:
def get_app_list(self, request, app_label=None):
"""
Return a sorted list of all the installed apps that have been
registered in this site.
"""
app_dict = self._build_app_dict(request, app_label)
# Sort the apps alphabetically.
app_list = sorted(app_dict.values(), key=lambda x: x["name"].lower())
# Sort the models alphabetically within each app.
for app in app_list:
app["models"].sort(key=lambda x: x["name"])
return app_list我的版本:
def get_app_list(self, request, app_label=None):
"""
Return a sorted list of all the installed apps that have been
registered in this site.
"""
app_dict = self._build_app_dict(request, app_label)
# Sort the apps alphabetically.
app_list = sorted(app_dict.values(), key=lambda x: x["name"].lower())
# Sort the models alphabetically within each app.
for app in app_list:
app["models"].sort(key=lambda x: x["name"])
for model in app['models']:
if hasattr(model['model'], 'get_name_admin_panel'):
model['name'] = model['model'].get_name_admin_panel()
return app_list在返回之前,我增加了3行新行(如果序列对您很重要,也可以在排序之前添加这些行)
如果get_name_admin_panel方法是为模型描述的,那么我们将其名称更改为该方法返回的名称。
在模型本身中,我添加了以下行:
@classmethod
def get_name_admin_panel(cls):
return _('Posts ({})').format(Post.objects.filter(...).count())由于这一点,我现在可以为verbose_name_plural字段设置一个静态值,并且迁移不会重复多次。
如果您没有指定一个@classmethod,那么不幸的是,管理面板页面将加载一个错误,但我没有发现任何问题。
https://stackoverflow.com/questions/73864933
复制相似问题