Zum Beispiel (nicht der Fall, aber nur zur Veranschaulichung), wenn ich eine Aktion hinzufügen wollte, um ein spezifisches Feld in den ausgewählten Elementen auf X zu setzen. Ist es möglich, eine Aktion hinzuzufügen, um X anstelle von hart einzugeben codiert?Können Sie Parameter zu benutzerdefinierten Django-Admin-Aktionen hinzufügen?
Antwort
See: Actions that Provide Intermediate Pages
Sie es nicht richtig von der Änderungsliste Seite tun können, aber auf dem Zwischenseite, könnten Sie ein Formular, das es dem Benutzer erlauben würde einen Wert, eingeben und dann diesen Wert verwenden für die Aktion.
Es ist möglich mit Django 1.5, obwohl es ein wenig hackish ist. Ich bin mir nicht sicher, mit welchen anderen älteren Django-Versionen es möglich ist.
Sie schreiben Ihre eigene ModelAdmin-Unterklasse. ModelAdmin hat ein Attribut mit dem Namen action_form
, das die Form vor Go
Schaltfläche auf der Änderungsliste bestimmt. Sie können Ihr eigenes Formular schreiben und es als action_form für Ihre ModelAdmin-Unterklasse festlegen.
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
Mit diesen Änderungen finden Sie eine CharField haben, wo man Wert für X
setzen können.
Und verwenden Sie x_field
in Ihrer Aktionsfunktion.
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]