Wie kann die Auswahl eines untergeordneten Felds basierend auf dem Wert eines übergeordneten Felds eingeschränkt werden?

Ich habe mehrere ziemlich komplexe Formulare, die sich auf Modellhierarchien stützen, um @ zuzuweiseForeignKey Werte. Ich muss die Auswahlmöglichkeiten für ein untergeordnetes Feld basierend auf dem Wert des übergeordneten Felds einschränken. Das Problem besteht darin, dass der Wert eines übergeordneten Felds aus anfänglichen Daten stammen kann (eine GET-Anforderung)ode aus gebundenen Daten (eine POST-Anfrage). Daher repliziere ich dieses Muster häufig:

class MyForm(forms.Form):
    parent = forms.ModelChoiceField(queryset=Parent.objects.all())
    child = forms.ModelChoiceField(queryset=Child.objects.all())

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

        # Limit 'child' choices based on current value of 'parent'
        if self.is_bound and self.data.get('parent'):
            self.fields['child'].queryset = Child.objects.filter(parent__pk=self.data['parent'])
        elif self.initial.get('parent'):
            self.fields['child'].queryset = Child.objects.filter(parent=self.initial['parent'])
        else:
            self.fields['child'].choices = []

Ich habe das Gefühl, dass es einen effizienteren Weg gibt, dies zu erreichen. Was vermisse ich

Antworten auf die Frage(6)

Ihre Antwort auf die Frage