2017-05-05 5 views
0

ich eine Form haben, die meine Datenbank wie so fragt:Es werden mehrere Werte eines Objekts in einem Django ModelChoiceField

class Pull(forms.Form): 
    select = forms.ModelChoiceField(queryset=OrderEntry.objects.values_list 
    ('val_a', 'val_b'), required=True) 

Standardmäßig wird es die Werte zeigen, aber es ist wirklich hässlich und nicht Spaß zu sehen . Auf der Webseite sieht es so etwas wie dies in der Drop-Down-Menü:

('A','B') 
('C','D') 

Ich möchte es so etwas wie folgt aussehen:

A | B 
C | D 

Oder wirklich, jedenfalls die für einen Benutzer leicht sein würde, lesen. Gibt es eine Möglichkeit, dies zu erreichen? Danke!

Antwort

2

Unterklasse ModelChoiceField und definieren label_from_instance, um den gewünschten Wert zurückzugeben.

class MyModelChoiceField(forms.ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "{} | {}".format(obj.val_a, obj.val_b) 

Jetzt verwenden, die mit einem Standard-queryset:

select = MyModelChoiceField(queryset=OrderEntry.objects.all(), required=True) 
+0

Große und schnelle Antwort, danke! Ich bekomme einige Syntaxfehler, wenn ich versuche, die Unterklasse zu erstellen. 'ModelChoiceField ist nicht definiert'. – GreenSaber

+0

Sorry, aktualisiert, um die 'forms'-Referenz aus Konsistenzgründen zu verwenden. –

+0

Perfekt, danke! Ich werde das als Antwort wählen! Ich habe eine Bonusfrage, wenn Sie dafür bereit sind. Wie platziere ich alle Objekte gleichmäßig? – GreenSaber

Verwandte Themen