分裂一个ManyToManyField过的的ModelForm多个表单域
-
19-08-2019 - |
题
所以我有一个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)
我不明白为什么这是行不通的,但我要测试它只是为了确保...
修改:强>测试和它的工作原理
不隶属于 StackOverflow