Django以模型形式从对象传递初始值

2024-10-02 22:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

对于模型ModelA,我有django模型形式MyModelFormA(我在FormView中使用这些格式)。在

我想使用ModelA的现有对象将初始值传递给表单,并在发生更改时为其创建新对象。在

我传递的初始值如下:

def get_form_kwargs(self):
    kwargs = super(MyFormView, self).get_form_kwargs()
    kwargs.update({'instance': ModelAObject})

我不知道为什么,但是当表单像下面这样被验证时

^{pr2}$

它只是更新现有的instance对象,而不是创建新的对象。在

  1. HTTP请求是无状态的,请求如何知道在前一个请求中正在传递处理的instance

  2. 如何解决这个问题?

我想做点什么

def get_initial(self):
    initial = model_to_dict(MyModelAObject)
    return initial

实际上,MyModelFormA中只有MyModelA字段的子集。最初将所有字段作为dict传递,不会造成任何麻烦吗?在

有什么优雅的处理方法吗?在


Tags: 对象djangoinstance模型selfform表单get
2条回答

或许你可以试试这个:

^{1}$

检查In Django 1.4, do Form.has_changed() and Form.changed_data, which are undocumented, work as expected?以查看form.has_changed()将如何工作。在

  1. 当您传递ModelForm一个实例时,也会将该实例的id字段设置为表单的初始值。因此,如果它在POST中接收到ID,它会将其视为现有对象并更新它

  2. 您需要传递单个字段的初始值(即id除外)。最好的方法是在ModelForm中将所需的字段作为初始字段传递。

def get_initial(self):
  return {
      'a': MyModelAObject.a,
      ....
  }

相关问题 更多 >