Ad esempio (non il caso, ma solo per illustrare) se volevo aggiungere un'azione per impostare un campo specifico negli elementi selezionati su X. È possibile aggiungere un'azione per consentire l'immissione di X al contrario di codificato?È possibile aggiungere parametri alle azioni di amministrazione personalizzate Django?
risposta
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.
È 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]