Добавление текста справки по модели в форму администратора django
В моем приложении django я хотел бы добавить текст специальной справки в форму изменения администратора для некоторых моих моделей. Примечание. Я не говорю о специфичном для поля атрибуте help_text
, который я могу установить в отдельных полях. Например, в верхней части формы изменения для My_Model
в My_App
мне бы хотелось добавить HTML-код, который гласит: "Для получения дополнительной информации о моей модели см. http://example.com", чтобы предоставить ссылку на внутреннюю документацию wiki.
Есть ли какой-либо простой способ сделать это, или мне нужно создать пользовательскую форму для модели? Если да, можете ли вы привести мне пример того, как я это сделаю?
Ответы
Ответ 1
Существует довольно простой, но недокументированный способ выполнения этого.
Определить render_change_form в классе администратора
Сначала вам нужно передать дополнительный контекст вашему администратору. Для этого вы можете определить функцию 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 %}
Я решил разместить этот шаблон внутри шаблонов /admin/myapp/, но это также гибко.
Дополнительная информация доступна по адресу:
http://davidmburke.com/2010/05/24/django-hack-adding-extra-data-to-admin-interface/
http://code.djangoproject.com/wiki/NewformsHOWTO#Q:HowcanIpassextracontextvariablesintomyaddandchangeviews
Ответ 2
Используйте admin 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
делает поля данных более широкими, а другие имена классов означают, что ваш CSS говорит, что они делают).
Будьте осторожны: строка description
считается безопасной, поэтому не помещайте туда какие-либо неочищенные данные. Это делается для того, чтобы вы могли поместить разметку там, где это необходимо (например, ваша ссылка), однако форматирование блоков (например, списки <ul>
), вероятно, будет выглядеть неправильно.
Ответ 3
Если я понимаю, что вы хотите, код ниже должен делать то, что вы хотите.
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, который вы переопределили.
Ответ 4
Помимо возможности создания полей с описаниями, вы можете переопределить шаблон администратора для формы изменения.
Ответ 5
Как обновление к этому вопросу. Вы можете сделать это в модели, используя help_text
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.help_text