2009-12-28 33 views
21

Ist das korrekt?Django: limit_choices_to (Ist das korrekt)

Ich versuche sicherzustellen, dass ein Bestellformular nur Kundenoptionen anzeigt, die zum selben Konto wie die Bestellung gehören.

Wenn ich einen eklatanten Fehlschluss übersehen habe, lassen Sie es mich wissen.

Die Hauptsache ich betroffen bin mit ist:

limit_choices_to={'account': 'self.account'} 
+0

Ich habe Ihre Frage nicht verstanden. Könntest du klarer sein? – Mayuresh

Antwort

18

Die einzige Antwort auf "ist es richtig" ist "funktioniert es, wenn Sie es ausführen?" Die Antwort darauf ist natürlich nein, also weiß ich nicht, warum du hier fragst.

Es gibt keine Möglichkeit, limit_choices_to dynamisch zu verwenden, um basierend auf dem Wert eines anderen Felds im aktuellen Modell zu begrenzen. Der beste Weg dazu ist das Anpassen des Formulars. Definieren Sie eine ModelForm-Unterklasse und überschreiben Sie die __init__-Methode:

class MyOrderForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyOrderForm, self).__init__(*args, **kwargs) 
     if 'initial' in kwargs: 
      self.fields['customer'].queryset = Customer.objects.filter(account=initial.account) 
+39

Nur weil es für mich nicht funktionierte, hieß das nicht, dass es falsch sein musste. Ich fragte, weil es auf der Django-Site keine eindeutige Dokumentation zu dieser Funktion gibt und ich nicht sicher war, ob meine Syntax korrekt war. – orokusaki

+0

Dies ist auch gut, wenn Sie Request-Obj in der Klasse MyOrderForm haben müssen -> http://Stackoverflow.com/a/6062628/758202 – zzart

+0

Ja, das ist nicht sehr klar in den Dokumenten. Ich nehme an, das Problem ist, dass 'limit_choices_to' ein Parameter der ForeignKey-Funktion ist und diese Funktion einem Klassenmitglied zugewiesen werden muss. Auf dieser Ebene bedeutet "Selbst" nichts. Um es zum Laufen zu bringen, sollte 'Django' eine Filterfunktion haben, die in' __init__' funktioniert und, soweit ich weiß, hat es keine. –

-1

limit_choices_to={'account': 'self.account'} falsch ist, da der Fremdschlüssel für Kunden nicht zu Account verweisen.

+0

Der Kunde hat jedoch das Attribut "account". Trotzdem ist das der Fall? – orokusaki

0

Sie sollten choices Feld Ihres Bestellformulars (geerbt von ModelForm) im Konstruktor festlegen.

Verwandte Themen