对于模型ModelA
,我有django模型形式MyModelFormA
(我在FormView
中使用这些格式)。在
我想使用ModelA
的现有对象将初始值传递给表单,并在发生更改时为其创建新对象。在
我传递的初始值如下:
def get_form_kwargs(self):
kwargs = super(MyFormView, self).get_form_kwargs()
kwargs.update({'instance': ModelAObject})
我不知道为什么,但是当表单像下面这样被验证时
^{pr2}$它只是更新现有的instance
对象,而不是创建新的对象。在
HTTP请求是无状态的,请求如何知道在前一个请求中正在传递处理的instance
如何解决这个问题?
我想做点什么
def get_initial(self):
initial = model_to_dict(MyModelAObject)
return initial
实际上,MyModelFormA
中只有MyModelA
字段的子集。最初将所有字段作为dict传递,不会造成任何麻烦吗?在
有什么优雅的处理方法吗?在
或许你可以试试这个:
^{1}$检查In Django 1.4, do Form.has_changed() and Form.changed_data, which are undocumented, work as expected?以查看
form.has_changed()
将如何工作。在当您传递ModelForm一个实例时,也会将该实例的id字段设置为表单的初始值。因此,如果它在POST中接收到ID,它会将其视为现有对象并更新它
您需要传递单个字段的初始值(即id除外)。最好的方法是在ModelForm中将所需的字段作为初始字段传递。
相关问题 更多 >
编程相关推荐