2012-08-01 5 views

risposta

12

See: Actions that Provide Intermediate Pages

Non puoi farlo direttamente dalla pagina elenco modifiche, ma sulla tua pagina intermedia, si potrebbe avere una forma che permetta all'utente di inserire un valore, e quindi utilizzare tale valore per l'azione.

4

È possibile con Django 1.5, anche se è un po 'hacker. Non sono sicuro di quali altre versioni di Django più vecchie sia possibile.

Scrivi la sottoclasse ModelAdmin. ModelAdmin ha un attributo chiamato action_form che determina il modulo mostrato prima del pulsante Go nella lista delle modifiche. È possibile scrivere il proprio modulo e impostarlo come action_form nella sottoclasse ModelAdmin.

from django.contrib.admin.helpers import ActionForm 
# ActionForm is the default form used by Django 
# You can extend this class 

class XForm(ActionForm): 
    x_field = forms.CharField() 


class YourModelAdmin(admin.ModelAdmin): 
    action_form = XForm 

Con queste modifiche, si avrà una CharField, dove si può mettere il valore per X.

E utilizzare x_field nella funzione di azione.

def set_x_on_objects(modeladmin, request, queryset): 
    for obj in queryset: 
     obj.something = request.POST['x_field'] 
    # do whatever else you want 

class YourModelAdmin(admin.ModelAdmin): 
    action_form = XForm 
    actions = [set_x_on_objects]