Formulare: Mehrfachauswahl in Django
Andreas Dölling
- python
Hallo,
ich befasse mich seit einer Woche mit dem Framework "Django" und bin davon absolut begeistert.
Als Anfänger bin ich nun aber auf ein Problem gestoßen, zu dem ich trotz langer Suche noch keine Lösung gefunden habe: Wie kann ich eine Mehrfachauswahl über Checkbox-Felder realisieren?
In PHP kann ich ja die gewählten Werte als Array ans Backend liefern, indem ich den INPUT-Elementen einen Namen à la "keywords[]" gebe.
Das scheint aber in Python/Django nicht zu funktionieren.
Anknüpfend daran noch die Frage, ob mein Ansatz in den Views ok ist:
picture_list = Picture.objects.extra(where=['id IN (' + keywords + ')'])
Ein hilfreicher Link wäre klasse!
Thanx und ciao,
Andreas
Hallo,
Als Anfänger bin ich nun aber auf ein Problem gestoßen, zu dem ich trotz langer Suche noch keine Lösung gefunden habe: Wie kann ich eine Mehrfachauswahl über Checkbox-Felder realisieren?
ok, _dieser_ Teil meiner Frage ist jetzt beantwortet. So geht's:
mit request.POST.getlist('keywords') bekommt man alle gewählten Optionen (egal, ob bei SELECT-Feldern oder Checkbox-Feldern) als Listenobjekt geliefert.
Die eckigen Klammern im name-Attribut des Formularelements braucht man _nicht_.
Tja - jetzt frage ich mich noch, wie ich dann in der View Picture-Objekte aus der Datenbank bekomme, die zu einem der gewählten Begriffe gehören (Picture und Keyword stehen in einer many-to-many-Beziehung).
Im Moment sieht es bei mir so aus:
wert = ""
for val in request.POST.getlist('keywords'):
if(wert != ''): wert += ', '
wert = wert + str(val)
wert = wert + ""
picture_list = Picture.objects.extra(where=['keywords IN (' + wert + ')'])
Bin für Tipps dankbar!
Thanx und ciao,
Andreas
Hallo,
Tja - jetzt frage ich mich noch, wie ich dann in der View Picture-Objekte aus der Datenbank bekomme, die zu einem der gewählten Begriffe gehören (Picture und Keyword stehen in einer many-to-many-Beziehung).
obwohl es hier anscheinend nicht gerade von Django-Freunden wimmelt, hier der Vollständigkeit halber die Lösung des zweiten Teilproblems:
picture_list = Picture.objects.filter(keywords__id__in = request.POST.getlist('keywords'))
Es war also alles mal wieder viel einfacher, als ich gedacht hatte...
;)
Ciao,
Andreas
Hallo Andreas,
obwohl es hier anscheinend nicht gerade von Django-Freunden wimmelt ...
Lass Dich trotzdem nicht davon abhalten, weiter Fragen zu stellen. Irgendwann liest auch jemand Deine Frage, bevor Du sie selber beantworten kannst. ;) Speaking of ... Letztendlich standen bislang die Antworten auf Deine Fragen auch im Referenzteil der doch ziemlich guten Dokumentation von Django. Ich bin sicher, Dir ist diese bekannt, wird sie doch mitgeliefert, aber ich wollte trotzdem noch mal darauf hinweisen.
Tim