gpt4 book ai didi

python - Django AdminSite定制如何编辑sites.py文件? ("Properly")

转载 作者:行者123 更新时间:2023-12-01 07:46:23 25 4
gpt4 key购买 nike

我当前的目标是在管理界面上显示注册用户的数量,例如 <h1>Users Count: {{model.count}}</h1>假设模型已经等于用户模型。

为了实现这一点,我必须在位于 django.contrib.admin 的sites.py 中添加一行;有没有正确的方法来编辑这个文件?我应该复制整个 django.contrib.admin 吗?

注意:我在 venv 中编辑了文件并且它可以工作,但我想要一种更干净的方式,其中每个修改都位于我的管理应用程序下,而不是在 venv 中。

最佳答案

您需要的是位于本地 admin.py 文件中的 CustomAdminSite。在这种情况下,我必须添加以下函数包括其所需的导入(从 django.contrib.admin.sites.py“在 AdminSite 部分”复制):

def _build_app_dict(self, request, label=None):
"""
Build the app dictionary. The optional `label` parameter filters models
of a specific app.
"""
app_dict = {}

if label:
models = {
m: m_a for m, m_a in self._registry.items()
if m._meta.app_label == label
}
else:
models = self._registry

for model, model_admin in models.items():
app_label = model._meta.app_label

has_module_perms = model_admin.has_module_permission(request)
if not has_module_perms:
continue

perms = model_admin.get_model_perms(request)

# Check whether user has any perm for this module.
# If so, add the module to the model_list.
if True not in perms.values():
continue

info = (app_label, model._meta.model_name)
model_dict = {
'name': capfirst(model._meta.verbose_name_plural),
'object_name': model._meta.object_name,
'perms': perms,
'admin_url': None,
'add_url': None,
'count': model.objects.count(), {# !!----ONLY THIS LINE WAS ADDED------- #}
}
if perms.get('change') or perms.get('view'):
model_dict['view_only'] = not perms.get('change')
try:
model_dict['admin_url'] = reverse('admin:%s_%s_changelist' % info, current_app=self.name)
except NoReverseMatch:
pass
if perms.get('add'):
try:
model_dict['add_url'] = reverse('admin:%s_%s_add' % info, current_app=self.name)
except NoReverseMatch:
pass

if app_label in app_dict:
app_dict[app_label]['models'].append(model_dict)
else:
app_dict[app_label] = {
'name': apps.get_app_config(app_label).verbose_name,
'app_label': app_label,
'app_url': reverse(
'admin:app_list',
kwargs={'app_label': app_label},
current_app=self.name,
),
'has_module_perms': has_module_perms,
'models': [model_dict],
}

if label:
return app_dict.get(label)
return app_dict

关于python - Django AdminSite定制如何编辑sites.py文件? ("Properly"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56443034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com