是否可以在django-admin中的某个模型的列表显示页面上放置模型描述或描述?
我正在谈论类似于点击django-admin主页上的模型名称链接以及当您转到该模型的列表显示页面时的内容。将在表格上写下描述。像
这样的东西"此模型用于记录将由我们提取的所有帐户....依此类推"
这样的事情,有可能吗?
答案 0 :(得分:7)
这将是一个非常好的功能,可以添加到Django管理员的核心。在此之前,您可以快速了解您的问题。
我们假设您要打印每个模型的docstring
,如下所示:
class MyModel(models.Model):
"""
I wanna get printed in the Admin!
"""
# model fields here
因此,您想在change_list
页面中打印它。好。
创建custom template tag(在您的应用中或创建另一个将保存全局模板标记/过滤器的应用),如下所示:
from django import template
from django.utils.html import mark_safe
register = template.Library()
@register.simple_tag()
def model_desc(obj):
if obj.__doc__:
return mark_safe('<p>{}</p>'.format(obj.__doc__))
return ''
现在,在项目目录(manage.py
所在的位置)内创建一个这样的结构:
project/
project/
project stuff here, i.e wsgi.py, settings etc
myapp/
myapp stuff here, i.e models, views etc
templates/
admin/
change_list.html
manage.py
在change_list.html
内添加以下内容:
{% extends 'admin/change_list.html' %}
{% load yourapp_tags %}
{# block.super will print the "Select <Model> to change" h1 title #}
{# The model_desc template tag is the one you created and prints the docstring of the given model #}
{% block content_title %}{{ block.super }}<br>{% model_desc cl.model %}{% endblock %}
这是一个截图:
[更新] :我seen in the source表示如果没有指定docstring
,Django将按以下格式为您生成一个:ModelName(model_field_name1, model_field_name2, ...)
。如果您不想这样做,只需执行以下操作:
class MyModelWithoutDocstring(models.Model):
# model fields here
MyModelWithoutDocstring.__doc__ = '' # "reset" the __doc__ on this model.