向Django模型的管理表单添加全局帮助文本

56 投票
6 回答
27636 浏览
提问于 2025-04-16 04:14

在我的Django应用中,我想在某些模型的管理修改表单上添加自定义的帮助文本。需要注意的是,我不是在说可以在单独字段上设置的那种特定字段的help_text属性。举个例子,我希望在My_App中的My_Model的修改表单顶部添加一些HTML内容,写上“有关My Model的更多信息,请查看http://example.com”,这样就可以提供一个指向内部文档维基的链接。

有没有简单的方法可以实现这个功能,还是说我需要为这个模型创建一个自定义的管理表单?如果是这样,你能给我一个示例,告诉我该怎么做吗?

6 个回答

3

除了可以创建带有描述的 字段组,你还可以 自定义管理界面的修改表单模板

80

使用管理员的 fieldsets

class MyAdmin(admin.ModelAdmin):
    fieldsets = (
        (None, {
            'fields': ('first', 'second', 'etc'),
            'description': "This is a set of fields group into a fieldset."
        }),
    )
    # Other admin settings go here...

在管理员界面中,你可以有多个字段组(fieldsets)。每个字段组可以有自己的标题(把上面的 None 替换成你想要的标题)。你还可以给字段组添加 'classes': ('collapse',),,这样它一开始就会是收起状态(wide 类会让数据字段变宽,其他类名的效果则取决于你的CSS样式)。

要小心:description 字符串被认为是安全的,所以不要在里面放任何未经处理的数据。这是为了让你可以根据需要放一些标记(比如链接),不过,块格式(像 <ul> 列表)可能会显示得不太对。

41

有一种相对简单但文档说明不多的方法可以实现这个功能。

在Admin类中定义render_change_form

首先,你需要给你的管理界面传递额外的信息。为此,你可以在你的Admin类中定义一个叫做render_change_form的函数,比如:

# admin.py
class CustomAdmin(admin.ModelAdmin):
    def render_change_form(self, request, context, *args, **kwargs):
        # here we define a custom template
        self.change_form_template = 'admin/myapp/change_form_help_text.html'
        extra = {
            'help_text': "This is a help message. Good luck filling out the form."
        }
        
        context.update(extra)
        return super().render_change_form(request, context, *args, **kwargs)

创建自定义模板

接下来,你需要创建这个自定义模板(change_form_help_text.html),并且要扩展默认的'admin/change_form.html'。

# change_form_help_text.html
{% extends 'admin/change_form.html' %}
{% block form_top %} 
    {% if help_text %}<p>{{ help_text }}</p>{% endif %}
{% endblock %}

我选择把这个模板放在templates/admin/myapp/文件夹里,但这个位置是可以灵活调整的。


更多信息可以查看:

http://davidmburke.com/2010/05/24/django-hack-adding-extra-data-to-admin-interface/

http://code.djangoproject.com/wiki/NewformsHOWTO#Q:HowcanIpassextracontextvariablesintomyaddandchangeviews

撰写回答