python - modelos - Agregar texto de ayuda de todo el modelo a la forma de administrador de un modelo django
django tutorial (5)
En mi aplicación django, me gustaría poder agregar texto de ayuda personalizado al formulario de cambio de administrador para algunos de mis modelos. Tenga en cuenta que no estoy hablando del atributo help_text
específico de campo que puedo establecer en campos individuales. Por ejemplo, en la parte superior del formulario de cambio para My_Model
en My_App
me gustaría poder agregar algo de HTML que diga "Para obtener información adicional sobre My Model, vea http://example.com " para proporcionar un enlace. a una wiki de documentación interna.
¿Hay alguna manera simple de lograr esto, o necesito crear un formulario de administrador personalizado para el modelo? Si es así, ¿puedes darme un ejemplo de cómo lo haría?
Además de la posibilidad de crear conjuntos de fieldsets , puede anular la plantilla del administrador para el formulario de cambio .
Hay una forma bastante simple pero poco documentada de lograr esto.
Definir render_change_form en la clase Admin
En primer lugar, debe pasar contexto adicional a su administrador. Para hacer esto, puede definir una función render_change_form dentro de su Clase de administrador, por ejemplo:
# 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)
Creando una plantilla personalizada
A continuación, debe crear esa plantilla personalizada (change_form_help_text.html) y extender el valor predeterminado ''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 %}
Elegí colocar esta plantilla dentro de templates / admin / myapp /, pero esto también es flexible.
Más información disponible en:
http://davidmburke.com/2010/05/24/django-hack-adding-extra-data-to-admin-interface/
Si entiendo lo que quiere, el código siguiente debe hacer lo que quiera.
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
Ese es un ejemplo del uso de alguna lógica para modificar una forma anulada. Así que solo póngalo en su constructor ModelAdmin que sobreescribió.
Solo como una actualización de esta pregunta. Puedes hacer esto en el modelo usando help_text
https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.Field.help_text
Usa los conjuntos de fieldsets del 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...
Puede tener múltiples conjuntos de campo en un administrador. Cada uno puede tener su propio título (reemplace el None
anterior con el título). También puede agregar ''classes'': (''collapse'',),
a un conjunto de campos para que comience a colapsarse (la clase wide
hace que los campos de datos sean más anchos, y otros nombres de clases significan lo que su CSS dice que hacen).
Tenga cuidado: la cadena de description
se considera segura , así que no coloque ningún dato sin limpiar allí. Esto se hace para que pueda poner marcas ahí cuando sea necesario (como su enlace), sin embargo, el formateo de bloques (como <ul>
listas) probablemente se verá mal.