我使用Django 1.11.2开发网站。我使用ModelForms在我的网站上编辑我的模型实例。表单的每个字段都会通过“初始化”来获取我想要编辑的实例的拟合值。在我看来。除了ManyToManyFields之外,它适用于所有字段。
相关代码如下所示:
models.py:
class model1(models.Model):
name = models.CharField(max_length=45, blank=False, null=False)
class model2(models.Model):
name = models.CharField(max_length=45, blank=False, null=False)
relation = models.ManyToManyField(model1)
forms.py中的ModelForm:
class model2_form(forms.ModelForm):
class Meta:
model = model2
fields = '__all__'
和我用来编辑model2内容的视图:
def model2_edit(request, objectid):
link = 'Model2'
model2_inst = model2.objects.get(id=objectid)
form = model2_form(initial={'name': model2_inst.name,
'relation': ???})
if request.method == 'POST':
f = model2_form(request.POST, instance=model2_inst)
if f.is_valid():
f.save()
return HttpResponseRedirect('/model2')
return render(request, "edit_db.html",
{"form": form, "link":link})
每次我通过ModelForm编辑一个model2的实例,'关系'已经存在的实例未被预选('初始'不工作)。如果我在没有再次选择关系的情况下保存这样的表单,它们将被删除,并且model2的实例不再具有关系。 在' ???'在我的代码中,我尝试了许多方法来获取已经在表单中选择的关系,但我找不到工作方式。
我希望我设法描述我的问题,提前感谢任何帮助或想法。
答案 0 :(得分:1)
form = model2_form(initial={'name': model2_inst.name,
'relation': [i.id for i in model2_inst.relation.all()]})
答案 1 :(得分:1)
您应该为GET和POST请求提供>>> callable(sum)
True
>>> callable(3)
False
>>> callable(functools.partial(sum, 1))
True
。这样,您不需要提供instance
数据 - Django将自动从实例中获取值。
initial