所以我有一个ManyToManyField一个模式叫比赛。我有两个比赛字段的ModelForm:

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())

毕竟的方法(i)有从子类查询集。当我保存在我看来,我的形式做这样:

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

无论如何,这一切工作正常。我无法弄清楚如何做的是填补这些表单域时,我加载现有岗位。也就是说,当我通过实例=后到窗体。任何想法?

有帮助吗?

解决方案 2

保罗Bergantino是在正确的轨道上,并帮我找到它。这是溶液:

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()]

其他提示

您可以做这样的事情到的ModelForm:

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)

我不明白为什么这是行不通的,但我要测试它只是为了确保...

修改:测试和它的工作原理

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top