Ich habe eine benutzerdefinierte Ansicht erstellt.
Wie kann ich die Ansicht in den Admin einfügen?
Für eine normale Admin-Klasse können wir sie einfach bei der Admin-Site registrieren:
class ListAdmin(admin.ModelAdmin):
...
admin.site.register(List, ListAdmin)
Ich habe versucht, get_url in admin.py zu überschreiben. Question_list ist die Ansicht:
class ListAdmin(admin.ModelAdmin):
def list_view(self, request):
return question_list(request)
def get_urls(self):
urls = super(ListAdmin, self).get_urls()
list_urls = patterns('', r'^list/$', self.list_view())
return list_urls + urls
admin.site.register(question_list, ListAdmin)
Dies ist die Fragelistenansicht:
def question_list(request):
#questions = Question.objects.filter(topic__icontains = 1)
questions = Question.objects.all()
return render_to_response('admin/question_list.html', {'questions':questions})
question_list = staff_member_required(question_list)
Ich bekomme 'Funktions'-Objekt ist kein iterierbarer Fehler.
Vielen Dank.
Basierend auf den von Ihnen bereitgestellten Informationen sollten Sie diesen Teil der Dokumentation von Django überprüfen:
Hinzufügen von Ansichten zu Administrationssites (Hinweis: Der Link ist für Version 1.5 gültig, da Version 1.3 nicht mehr unterstützt wird - die Lösung ist noch gültig).
Dann können Sie in diesem Blogbeitrag und dieser Frage nach weiteren Inspirationen und Details suchen.
An Ihrem Beispiel verstehe ich wirklich nicht, warum Sie keine reguläre ModelAdmin
mit einigen Filteroptionen verwenden :
class QuestionAdmin(admin.ModelAdmin):
list_filter = ('topic',)
Das Muster erhält eine Ansicht, nicht das Ergebnis des Aufrufens der Ansicht, d. H .:
list_urls = patterns('', r'^list/$', self.list_view())
sollte sein
list_urls = patterns('', r'^list/$', self.list_view)
Auch "list_view" (zu diesem Zeitpunkt) ist eine Ansicht wie jede andere. Daher muss ein HttpResponse-Objekt zurückgegeben werden.
def list_view(self, request):
return question_list(request)
Sie zeigen nicht den Code für question_list () an, aber ich habe den Verdacht, dass keine HttpResponse zurückgegeben wird.
P.S .: Wenn Sie das Traceback der "Funktion" Objekt ist nicht iterierbar "Ausnahme (Sie erhalten dies, wenn Sie" Liste/"?)?.
Hier ein Beispiel für alles, was zum Hinzufügen (ab Django 1.6) für eine benutzerdefinierte Seite erforderlich ist, auf die über eine Schaltfläche neben der Schaltfläche "Verlauf" oben rechts auf der Detailseite eines Objekts eine Verknüpfung hergestellt wird:
Sie sollten get_urls
in Ihrer ModelAdmin
-Unterklasse überschreiben.