python - Aggiunta di testo di guida a livello di modello al modulo di amministrazione di un modello di Django




django-models django-admin (4)

Nella mia app django, vorrei poter aggiungere testo di guida personalizzato al modulo di modifica dell'amministratore per alcuni dei miei modelli. Nota Non sto parlando dell'attributo help_text specifico per il campo che posso impostare su singoli campi. Ad esempio, nella parte superiore del modulo di modifica per My_Model in My_App mi piacerebbe essere in grado di aggiungere un codice HTML che dice "Per ulteriori informazioni su My Model, vedi http://example.com " per fornire un link a una wiki di documentazione interna.

C'è un modo semplice per realizzare questo, o devo creare un modulo di amministrazione personalizzato per il modello? Se è così, puoi darmi un esempio di come lo farei?


C'è un modo abbastanza semplice, ma poco documentato per realizzare questo.

Definisci render_change_form nella classe Admin

Per prima cosa, devi passare un contesto extra al tuo amministratore. Per fare ciò, puoi definire una funzione render_change_form all'interno della tua classe admin, ad esempio:

# 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)

Creare un modello personalizzato

Successivamente, devi creare quel modello personalizzato (change_form_help_text.html) ed estendere il valore predefinito '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 %}

Ho scelto di posizionare questo modello all'interno di templates / admin / myapp /, ma anche questo è flessibile.

Maggiori informazioni disponibili su:

http://davidmburke.com/2010/05/24/django-hack-adding-extra-data-to-admin-interface/

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



Se capisco quello che vuoi, il codice qui sotto dovrebbe fare quello che vuoi.

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

Questo è un esempio dell'uso di alcune regole per modificare una forma sovrascritta. Quindi lo metti nel tuo costruttore ModelAdmin che hai annullato.


Usa i 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...

Puoi avere più set di campi in un amministratore. Ciascuno può avere il proprio titolo (sostituire il None sopra con il titolo). Puoi anche aggiungere 'classes': ('collapse',), a un fieldset per far sì che inizi la compressione (la classe wide allarga i campi dei dati e gli altri nomi di classe significano qualunque cosa il tuo CSS dice di fare).

Fai attenzione: la stringa di description è considerata sicura , quindi non inserire dati non ripuliti. Questo è fatto in modo da poter inserire markup lì come necessario (come il tuo link), tuttavia, la formattazione del blocco (come <ul> liste) probabilmente avrà un aspetto sbagliato.





django-admin