Ich bin daran interessiert, eine Aktion für die Admin-Oberfläche zu erstellen, die zusätzliche Informationen benötigt, die über die ausgewählten Elemente hinausgehen. Mein Beispiel ist Massen-Hinzufügen von Comics zu einer Serie. (Ja, ich weiß, dass die offensichtliche Antwort darin besteht, ein Schema mit X-zu-X-Beziehungen zu erstellen, aber nur um eines einfachen Beispiels willen).Django: Wie erstellt man eine komplexe Admin-Aktion, die zusätzliche Informationen benötigt?
In diesem Beispiel habe ich 100 Comics erstellt. Nachdem sie erstellt wurden, möchte ich sie mit einem bereits erstellten Serienobjekt verknüpfen. Um diese Aktion innerhalb des Administrators auszuführen, möchte ich die Elemente auswählen und dann die Aktion initiieren. Ich sollte dann gefragt werden, welches Serienobjekt zu verwenden ist (über ein Popup, Zwischenformular usw.).
Ich habe die Anweisungen here befolgt, die behaupten, dies über eine Zwischenform zu erreichen. Nachdem ich damit gearbeitet habe, bekomme ich keine weiteren Fehler mehr, aber die Aktion selbst wird auch nicht ausgeführt - der Forloop wird nie ausgeführt. Stattdessen kehrt es zur Admin-Liste von Comics mit der Nachricht zurück: "Keine Aktion ausgewählt."
meine admin.py Methode:
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
def addSeries(self, request, queryset):
form = None
if 'cancel' in request.POST:
self.message_user(request, 'Canceled series linking.')
return
elif 'link_series' in request.POST:
form = self.SeriesForm(request.POST)
if form.is_valid():
series = form.cleaned_data['series']
for x in queryset:
y = Link(series = series, comic = x)
y.save()
self.message_user(request, self.categorySuccess.render(Context({'count':queryset.count(), 'series':series})))
return HttpResponseRedirect(request.get_full_path())
if not form:
form = self.SeriesForm(initial={'_selected_action': request.POST.getlist(admin.ACTION_CHECKBOX_NAME)})
return render_to_response('setSeries.html', {'comics': queryset, 'form': form, 'path':request.get_full_path()}, context_instance=RequestContext(request))
addSeries.short_description = 'Set Series'
Meine Zwischenform setSeries.html:
<!DOCTYPE html>
<html>
<head>
<title>Create Series Links</title>
</head>
<body>
<h1>Create Series Links</h1>
<p>Choose the series for the selected comic(s):</p>
<form method="post" action="{{ path }}">
<table>
{{ form }}
</table>
<p>
<input type="hidden" name="action" value="changeSeries" />
<input type="submit" name="cancel" value="Cancel" />
<input type="submit" name="link_series" value="link_series" />
</p>
</form>
<h2>This categorization will affect the following:</h2>
<ul>
{% for comic in comics %}
<li>{{ comic.title }}</li>
{% endfor %}
</ul>
</body>
</html>
Vielen Dank! Das hat alles perfekt funktionieren lassen. – tjw