2013-09-10 122 views
1

是否有任何简单的方法可以在初始化后更改Django模型窗体的实例?django更改模型窗体实例

例如目前在分贝为对象为1的ID下面将预先填充形式与所述内容的模板:

form = exampleModelForm(instance = Model.objects.get(pk=1) 

这也将保存相关的对象时保存( )被调用而不是创建一个新的。

在哪里,这将创建一个新的对象,而不是预先填充表单模板:

form = exampleModelForm() 

,因为我从一个不同的方法返回一个空白表格,然后,我会想指定实例在它被创建后修改它并修改该对象,以便保存它并使用db中存在的值预填充模板。我想是这样的,但似乎我已经试过不工作:

form = methodThatGetsForm(somearg) 
form.instance = ExampleModel.objects.get(pk = getId(somearg)) 

有没有办法,我在这里失踪的简单功能?

回答

1

我没有测试过这个,但我不知道你是否可以用返回的表单数据和实例作为新对象重新初始化一个新表单。

form = methodThatGetsForm(somearg) 
new_form = ExampleModelForm(form.cleaned_data, instance=ExampleModel.objects.get(pk=getID(somearg))) 
new_form.save() 

如果没有,应该有一种方式来获得的数据作为键/值对从form领域返回的字典,使用它的._meta数据。我想如果你发送该字典到表单init,它会将这些值分配给实例对象,就像发送它request.POST一样。