django-admin中的型号说明

Dea*_*ada 2 python django django-admin

是否可以在django-admin中将模型描述或描述放在某个模型的列表显示页面上?

我说的是当您点击django-admin主页上的模型名称链接时以及当您转到该模型的列表显示页面时.将在表格上写下描述.就像是

"此模型用于记录将由我们的scrape提取的所有帐户......依此类推"

这样的事情,有可能吗?

nik*_*k_m 8

这将是一个非常好的功能,可以添加到Django管理员的核心.在此之前,这是对您的问题的快速演练.

我们假设您要打印docstring每个模型,如下所示:

class MyModel(models.Model):
    """
    I wanna get printed in the Admin!
    """

    # model fields here
Run Code Online (Sandbox Code Playgroud)

所以,你想在change_list页面中打印它.好.

  1. 创建自定义模板标记(在您的应用内或创建另一个将保存全局模板标记/过滤器的应用),如下所示:

    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 ''
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在,在项目目录(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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在里面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 %}
    
    Run Code Online (Sandbox Code Playgroud)

这是一个截图:

Django admin中的docstring模型

[更新]:我在源代码看到,当没有docstring指定时,Django会以下列形式为你生成一个:ModelName(model_field_name1, model_field_name2, ...).如果您不想这样,只需执行以下操作:

class MyModelWithoutDocstring(models.Model):

    # model fields here

MyModelWithoutDocstring.__doc__ = ''  # "reset" the __doc__ on this model.
Run Code Online (Sandbox Code Playgroud)