将模型范围的帮助文本添加到django模型的pipe理员表单中

在我的Django应用程序中,我希望能够为我的一些模型的pipe理员更改表单添加自定义的帮助文本。 注意我没有谈论可以在单个字段上设置的特定于字段的help_text属性。 例如,在My_ModelMy_App的变更表单的顶部,我希望能够添加一些说“有关我的模型的更多信息,请参阅http://example.com ”的HTML以提供一个链接到一个内部文档维基。

有没有简单的方法来完成这个,或者我需要为模型创build一个自定义的pipe理窗体? 如果是这样,你能给我一个我将如何做的例子吗?

有一个相当简单的,但尚未完成这一点的文件。

在Admin类中定义render_change_form

首先,你需要传递额外的上下文给你的pipe理员。 要做到这一点,你可以在你的pipe理类中定义一个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(CustomAdmin, self).render_change_form(request, context, *args, **kwargs) 

创build一个自定义模板

接下来,您需要创build自定义模板(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 %} 

我已经select将这个模板放在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

使用pipe理员的字段集 :

 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... 

您可以在pipe理员中拥有多个字段集。 每个都可以有自己的标题(用标题replace上面的None )。 你也可以添加'classes': ('collapse',),到一个字段集合,让它开始崩溃( wide类使得数据字段变宽,而其他的类名称则意味着你的CSS说他们做的任何事情)。

小心: descriptionstring被认为是安全的 ,所以不要把任何不清楚的数据放在那里。 这样做是为了让标记可以根据需要放在那里(比如你的链接),但是块格式(比如<ul>列表)可能看起来是错误的。

如果我明白你想要什么,下面的代码应该做你想要的。

 def __init__(self, *args, **kwargs): super(ClassName, self).__init__(*args, **kwargs) if siteA: help_text = "foo" else: help_text = "bar" self.form.fields["field_name"].help_text = help_text 

这是使用一些逻辑来修改重写表单的一个例子。 所以你只要把它放在你的ModelAdmin构造函数中就可以了。

除了使用描述创build字段集的可能性之外,您还可以覆盖更改表单的pipe理员模板 。

就像这个问题的更新一样。 您可以使用help_text在模型中执行此help_text

https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.help_text