Frage

Also habe ich ein Modell mit einem ManyToManyField namens Turnieren. Ich habe eine Modelform mit zwei Turnierfeldern:

pay_tourns = forms.ModelMultipleChoiceField(
                        queryset=Tourn.objects.all().active().pay_tourns(),
                        widget=forms.CheckboxSelectMultiple())
rep_tourns = forms.ModelMultipleChoiceField(
                        queryset=Tourn.objects.all().active().rep_tourns(),
                        widget=forms.CheckboxSelectMultiple())

Die Verfahren nach all () gibt es von einem subclassed QuerySet. Wenn ich die Form meiner Ansicht nach Speichern kann ich so:

post.tournaments = (post_form.cleaned_data.get('pay_tourns')
                                + post_form.cleaned_data.get('rep_tourns'))

Wie auch immer, das alles funktioniert gut. Was ich kann nicht herausfinden, wie zu tun ist, diese Formularfelder ausfüllen, wenn ich eine bestehende Post bin Laden. Das heißt, wenn ich instance = Post an die Form übergeben. Irgendwelche Ideen?

War es hilfreich?

Lösung 2

Paolo Bergantino war auf dem richtigen Weg, und hat mir geholfen, es zu finden. Das war die Lösung:

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

    instance = kwargs.get('instance')
    if instance:
        self.fields['pay_tourns'].initial = [ o.id for o in instance.tournaments.all().active().pay_tourns()]
        self.fields['rep_tourns'].initial = [ o.id for o in instance.tournaments.all().active().rep_tourns()]

Andere Tipps

Sie könnte so etwas wie dies dem Modelform tun:

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

    instance = kwargs.get('instance')
    if instance:
        self.fields['pay_tourns'].queryset.filter(post=instance)
        self.fields['rep_tourns'].queryset.filter(post=instance)

Ich sehe nicht, warum das nicht funktionieren würde, aber ich werde es einfach zu testen, um sicherzustellen, dass ...

EDIT:. getestet und es funktioniert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top