我有一个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对象是不可迭代的。我应该如何处理?
答案 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。