在我的django应用程序中,我希望能够为我的某些模型添加自定义帮助文本到管理员更改表单。注意我不是在谈论我可以在各个字段上设置的字段特定help_text
属性。例如,在My_Model
中My_App
的更改表单的顶部,我希望能够添加一些HTML,其中显示“有关我的模型的其他信息,请参阅http://example.com”为了提供内部文档维基的链接。
有没有简单的方法来实现这一点,还是我需要为模型创建自定义管理表单?如果是这样,你能举个例子说明我会怎么做吗?
答案 0 :(得分:61)
使用管理员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...
您可以在管理员中拥有多个字段集。每个都可以有自己的标题(用标题替换上面的None
)。您还可以将'classes': ('collapse',),
添加到字段集以使其开始折叠(wide
类使数据字段更宽,其他类名称表示他们所说的任何内容)。
注意:description
字符串被视为安全,因此请勿在其中放置任何未清除的数据。这样做就可以根据需要将标记放在那里(比如链接),但是,块格式化(如<ul>
列表)可能看起来不对。
答案 1 :(得分:28)
有一种相当简单但未充分记录的方法可以实现这一目标。
首先,您需要将额外的上下文传递给您的管理员。为此,您可以在管理类中定义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)
接下来,您需要创建该自定义模板(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/
答案 2 :(得分:2)
如果我理解你想要什么,下面的代码应该做你想要的。
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构造函数中。
答案 3 :(得分:1)
答案 4 :(得分:0)
自django 3.0起,现在可以更轻松地覆盖help_text
:
from django.utils.translation import gettext_lazy as _
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
labels = {
'name': _('Writer'),
}
help_texts = {
'name': _('Some useful help text.'),
}
error_messages = {
'name': {
'max_length': _("This writer's name is too long."),
},
}
https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/#overriding-the-default-fields
答案 5 :(得分:-4)
就像这个问题的更新一样。您可以使用help_text
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.help_text