tutorial modelos consultas avanzadas python django django-models django-admin

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?



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/

http://code.djangoproject.com/wiki/NewformsHOWTO#Q:HowcanIpassextracontextvariablesintomyaddandchangeviews


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



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.