Подтвердить что ты не робот

Добавление текста справки по модели в форму администратора django

В моем приложении django я хотел бы добавить текст специальной справки в форму изменения администратора для некоторых моих моделей. Примечание. Я не говорю о специфичном для поля атрибуте help_text, который я могу установить в отдельных полях. Например, в верхней части формы изменения для My_Model в My_App мне бы хотелось добавить HTML-код, который гласит: "Для получения дополнительной информации о моей модели см. http://example.com", чтобы предоставить ссылку на внутреннюю документацию wiki.

Есть ли какой-либо простой способ сделать это, или мне нужно создать пользовательскую форму для модели? Если да, можете ли вы привести мне пример того, как я это сделаю?

4b9b3361

Ответ 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, который вы переопределили.