【发布时间】:2018-11-25 06:09:23
【问题描述】:
从 Django 1.8 (python 2.7) 升级到 Django 2.0 (python 3.6) 后,此表单和反向 m2m 小部件出现错误:
models.py
class Treatment(Model):
...
class Specialty(Model):
treatment = models.ManyToManyField(Treatment, related_name='specialties', blank=True)
...
。 这是治疗模型的表格。它还允许编辑专业(反向 m2m)。升级前它运行良好。
forms.py
class TreatDetail(forms.ModelForm):
specialties = forms.ModelMultipleChoiceField(
queryset=Specialty.objects.all().order_by('specialty_de'),
required=False,
widget=FilteredSelectMultiple('Specialties', False),
)
def save(self, commit=True):
treatment = super(TreatDetail, self).save(commit=False)
if commit:
treatment.save()
if treatment.pk:
treatment.specialties = self.cleaned_data['specialties']
self.save_m2m()
return treatment
def __init__(self, *args, **kwargs):
super(TreatDetail, self).__init__(*args, **kwargs)
if self.instance and self.instance.pk:
self.fields['specialties'].initial = self.instance.specialties.all()
class Meta:
model = Treatment
fields = (
'top_treatment',
'treatment_de',
....)
我收到此错误:
TypeError at /customadmin/treatdetail/2/de/ 直接分配给 禁止多对多集合的反面。采用 specialties.set() 代替。
treatment.specialties = self.cleaned_data['specialties']
我当然试过了:
treatment.specialties.set = self.cleaned_data['specialties']
错误消失,但反向m2m关系没有保存。
有人可以帮忙吗?
【问题讨论】:
标签: django django-forms django-orm