[django] admin-liste mit filter

Django, Flask, Bottle, WSGI, CGI…
Antworten
ralf58
User
Beiträge: 8
Registriert: Montag 16. August 2010, 21:27

Hallo,

ich möchte aus der Detail-View einer Schulung auf die Listenansicht der Teilnehmer gehen, aber dort nur die Teilnehmer der Schulung sehen und das Ganze mit der admin-Funktionalität.
Die Schulungs-Id rauszureichen bis zu einer view-Funktion ist kein Problem => my_app/schulung/35/teilnehmerliste
Aber wie bekomme ich nun die Admin-Liste für den Teilnehmer aufgerufen und dabei die Schulungs-Id übergeben? :K

Code: Alles auswählen

class Schulung...
    name = model. CharField...

class Teilnehmer
   name = model.CharField
   schulung = model.ForeignKey(schulung)
Danke im voraus
Ralf
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Was?! Bitte nochmal. Das versteht kein Mensch.
ralf58
User
Beiträge: 8
Registriert: Montag 16. August 2010, 21:27

Noch ein Beschreibungsversuch:

ich habe ein Model Schulung und ein Model Teilnehmer, wobei jeder Teilnehmer an genau 1 Schulung teilnimmt. Die Verwaltung für die Listen- und Detailansicht erfolgt jeweils über das django.contrib.admin-Package.
Auf der Detailseite der Schulung habe ich nun einen Link untergebracht, der mir die Teilnehmerliste zu dieser Schulung zeigen soll, d.h. im href die id der Schulung enthält.
Ich finde nun keine Möglichkeit diese id an die Methode queryset meiner TeilnehmerAdmin-Klasse durch zu reichen, um die Teilnehmerliste dort entsprechend zu filtern.

Ich hoffe, so ist es besser zu verstehen
Ralf
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
ralf58
User
Beiträge: 8
Registriert: Montag 16. August 2010, 21:27

Leider nicht so ganz.
Mit dem list_filter könnte der Anwender zwar auch die Teilnehmer der "einen" Schulung sehen. Dazu müsste er dann aber erst "seine" Schulung aus der, sehr langen, Liste der Schulungen auswählen.
Was ich möchte wäre sozusagen die feste Vorauswahl einer Schulung im Filter, ohne dass der Filter noch dar gestellt wird.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dann mußt du wohl die Admin Klasse erweitern. Das ist nicht ganz so einfach, aber dürfte gehen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Zwei Möglichkeiten:
  • Du schaust dir Inline Models an
  • Du hängst an die Teilnehmer-Liste-URL Query-Argumente an; Beispiele: schulung__id=42, id__exact=5, id__in=5,8,9, id__lt=200&id__gt=100 (100 < id < 200)
ralf58
User
Beiträge: 8
Registriert: Montag 16. August 2010, 21:27

inline-model ist leider nicht erwünscht.
Einen Parameter an die Url anhängen, also z.B. myapp/teilnehmer/schulung_id=35 erfordert ein Überschreiben der get_urls-Methode der abgeleiteten admin-Klasse, da sonst die change_view-Methode aufgerufen wird.
Das funktioniert soweit auch. Nun muss ich aber auch die changelist_view-Methode im Admin überschreiben. Dort kommt u'schulung_id=35' als unicode im Methodenparameter extra_context an. Das ist nicht sehr schön, aber es funktioniert.
Oder geht es auch etwas eleganter? :wink:
Antworten