ali*_*s51 5 django django-admin
我知道我可以使用 Django Admin 更改模型的显示标题
class Meta:
verbose_name='Custom Model Name Here'
Run Code Online (Sandbox Code Playgroud)
但是,有没有办法显示模型显示在哪个应用程序标题下?
例如,如果我Users在一个也称为的新应用程序中创建自定义用户模型users,则默认用户模型将从Authentication and Authorization > Users到Users > Users。
我想将其保留在原来的标题下Authentication and Authorization > Users。
我已阅读此答案,建议更改应用程序verbose_name,但它仅更改与模型关联的应用程序的详细名称。我想在管理面板上的不同组中显示模型。您可以在此处看到该方法遇到的问题:
您可以设置代理模型
在app_1.models.py中
class MyModel(models.Model):
...
Run Code Online (Sandbox Code Playgroud)
在app_2.models.py中
from app_1.models import MyModel
class MyModelProxy(MyModel):
class Meta:
proxy = True
Run Code Online (Sandbox Code Playgroud)
然后正常在admin中注册MyModelProxy
小智 1
没有简单的方法可以实现您想要的功能,请查看生成视图的 Django 代码/模板:
@never_cache
def index(self, request, extra_context=None):
"""
Display the main admin index page, which lists all of the installed
apps that have been registered in this site.
"""
app_list = self.get_app_list(request)
context = {
**self.each_context(request),
'title': self.index_title,
'app_list': app_list,
**(extra_context or {}),
}
request.current_app = self.name
return TemplateResponse(request, self.index_template or 'admin/index.html', context)
Run Code Online (Sandbox Code Playgroud)
templates/admin/index.html:
{% for app in app_list %}
<div class="app-{{ app.app_label }} module">
<table>
<caption>
<a href="{{ app.app_url }}" class="section" title="{% blocktrans with name=app.name %}Models in the {{ name }} application{% endblocktrans %}">{{ app.name }}</a>
</caption>
{% for model in app.models %}
<tr class="model-{{ model.object_name|lower }}">
{% if model.admin_url %}
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
{% else %}
<th scope="row">{{ model.name }}</th>
{% endif %}
{% if model.add_url %}
<td><a href="{{ model.add_url }}" class="addlink">{% trans 'Add' %}</a></td>
{% else %}
<td> </td>
{% endif %}
{% if model.admin_url %}
{% if model.view_only %}
<td><a href="{{ model.admin_url }}" class="viewlink">{% trans 'View' %}</a></td>
{% else %}
<td><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
{% endif %}
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Django 管理模板直接循环您的 app_list ,因此唯一的方法是覆盖模板admin/index.html以按照您想要的顺序放置模型。
来自 Django 文档:
对于那些无法以这种方式覆盖的模板,您仍然可以为整个项目覆盖它们。只需将新版本放在 templates/admin 目录中即可。这对于创建自定义 404 和 500 页面特别有用。
https://docs.djangoproject.com/en/2.2/ref/contrib/admin/#overriding-vs-replacing-an-admin-template
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |