Python Django ModelForm ManyToManyField isn';无法更新选定的值
我正在用Python3.4在Django 1.8中构建我的第一个项目。我在models.py中有一个名为Lid的模型:Python Django ModelForm ManyToManyField isn';无法更新选定的值,python,django,Python,Django,我正在用Python3.4在Django 1.8中构建我的第一个项目。我在models.py中有一个名为Lid的模型: class Lid(models.Model): ... vereniging = models.ManyToManyField(Vereniging, blank=True) 我使用以下模型表单forms.py class LidForm(forms.ModelForm): class Meta: model = Lid
class Lid(models.Model):
...
vereniging = models.ManyToManyField(Vereniging, blank=True)
我使用以下模型表单forms.py
class LidForm(forms.ModelForm):
class Meta:
model = Lid
exclude = []
当我使用这个模型表单创建一个表单来创建一个新对象时,会出现一个多选择框,我可以选择多个虚拟对象。这是我在views.py中的视图:
def add_lid(request):
if request.method == 'POST':
form = LidForm(request.POST, request.FILES)
if form.is_valid():
form.save()
messages.success(request, 'Succes.')
return HttpResponseRedirect(reverse('leden:home'))
else:
form = LidForm()
return render(request, 'leden/lid/addlid.html', {'formset': form})
但是,当我想要编辑对象时,我无法更改选定的Vereniging对象
def edit_lid(request, lid_id):
lid = get_object_or_404(Lid, pk=lid_id)
if request.method == 'POST':
form = LidForm(request.POST, request.FILES, instance=lid)
if form.is_valid():
nieuwlid = form.save(commit=False)
nieuwlid.inschrijving_oras = lid.inschrijving_oras
nieuwlid.save()
messages.success(request, 'Success.')
return HttpResponseRedirect(reverse('leden:lid', kwargs={'lid_id': lid_id}))
else:
form = LidForm(instance=lid)
return render(request, 'leden/lid/editlid.html', {'formset': form, 'lid': lid})
这基本上是我的问题:当使用ModelForm时,我只能在创建对象时设置许多关系。我无法更新这些m2m关系。你知道我做错了什么吗?使用save\u m2m()
。发件人:
当您的模型与另一个模型存在多对多关系时,可以看到使用commit=False
的另一个副作用。如果模型具有多对多关系,并且在保存表单时指定了commit=False
,Django将无法立即保存多对多关系的表单数据。这是因为在数据库中存在实例之前,不可能为实例保存多对多数据
为了解决这个问题,每次使用commit=False
保存表单时,Django都会向ModelForm
子类添加一个save_m2m()
方法。手动保存表单生成的实例后,可以调用save_m2m()
保存多对多表单数据