以Djano形式组合ModelChoiceFields以保存在单个ManyToManyField中

时间:2018-06-23 14:21:28

标签: python django django-forms

我有一个ModelForm,当我保存到数据库时,我想在其中将一系列ModelChoiceFields合并为一个ManyToMany字段。

所以我的模型形式如下:

class ExampleForm(forms.ModelForm):
    fulltime = forms.ModelChoiceField(
        queryset = Type.objects.filter(tag_type=jb_models.F_PTIME),
    )
    optional = forms.ModelChoiceField(
        queryset = Type.objects.filter(tag_type=jb_models.OPTIONAL),
    )
    class Meta:
        model = Job
        fields = ('jobtype', 'title', \
            'fulltime','optional')
        widgets = {
            'jobtype': forms.HiddenInput(),
            'title': forms.TextInput(attrs={'size':50}),
        }

    def save(self, commit=True):
        instance = super().save(commit=False)
        instance.jobtype.set(self.cleaned_data['fulltime'])
        instance.jobtype.add(self.cleaned_data['optional'])
        instance.save()
        return instance

这给了我TypeError对象是不可迭代的。我应该如何处理?

1 个答案:

答案 0 :(得分:1)

set()方法的参数应该是对象列表,因此可以用[]包装对象:

def save(self, commit=True):
    instance = super().save()
    instance.jobtype.set([self.cleaned_data['fulltime']])
    instance.jobtype.add(self.cleaned_data['optional'])
    return instance

还请注意,在设置instance的多关系之前,应先保存它们,否则会出错:

  

ValueError:“作业”实例需要具有主键值   在可以使用多对多关系之前。

选中此docs