2017-01-10 5 views
0

Ich bin neu in Django, und ich versuche, eine Mehrfachauswahl mit Kontrollkästchen zu erstellen. Das Problem ist, dass alle Beispiele, die ich gefunden habe, feste Auswahlmöglichkeiten haben, die im Formular angegeben sind, und ich brauche das nicht.Django: Überprüfen Sie mehrere Optionen mit nicht festen Entscheidungen

Konkreter läßt dies ein Modell für ein einfaches Autohaus app:

class CarBrand(models.Model): 
    name = model.CharField() 

class CarModel(models.Model): 
    name = model.CharField() 
    brand = model.ForeignKey(CarBrand) 

Mein Ziel ist, wenn ich die Seite für Audi eingeben, erhalte ich Optionen A3, A4, A5, aber wenn ich eingeben die Seite für BMW, ich bekomme Optionen M3, M4, M5. Nach dem Klicken auf das Senden sollte es alle ausgewählten Automodelle senden.

+0

Was meinen Sie mit festen Entscheidungen? Normalerweise haben alle Kontrollkästchen die ID der entsprechenden Instanz und sind daher nicht festgelegt. –

+0

Was ich meinte ist, dass ich kein statisches Wörterbuch für Wahlen habe. Die Auswahl hängt davon ab, welcher Benutzer angemeldet ist und auf welcher Seite er das Formular geöffnet hat. Wie im Beispiel, wenn die BMW Seite geöffnet wird, sind M3, M4, M5 die Optionen, aber wenn die Audi Seite geöffnet wird, werden andere Optionen angezeigt. – makons

Antwort

1

das Formular ein __init__ Methode geben, dass ein CarBrand als Parameter bekommt und dann den queryset zur Auswahl basiert darauf, dass:

class CarForm(forms.Form): 
    def __init__(self, car_brand, *args, **kwargs): 
     self.fields['cars'] = forms.ModelMultipleChoiceField(
      queryset=CarModel.objects.filter(brand=car_brand), 
      widget=forms.CheckboxSelectMultiple) 
     super(CarForm, self).__init__(*args, **kwargs) 

nun aus Ihrer Sicht zunächst die relevanten CarBrand Instanz für die Seite bekommen, Erstellen Sie das Formular mit CarForm(car_brand, request.POST) usw.

+0

Das ist genau das, was ich brauchte. Vielen Dank. – makons

+0

Zugriff auf CarModel-Felder in der Vorlage? Ich bekomme nur das Choice-Label, aber ich brauche andere Felder für jede Wahl. Ich versuche, so etwas zu erreichen: https://postimg.org/image/trj07ajgj/ – makons

Verwandte Themen