Python 在google appengine上使用django初始化带有数据的表单

Python 在google appengine上使用django初始化带有数据的表单,python,django,google-app-engine,Python,Django,Google App Engine,我有一个使用“from google.appengine.ext.db.djangoforms.ModelForm”的post处理程序。它将现有实例拉入数据库,然后通过以下方式初始化表单: myForm = TestForm(instance=self_instance, data=post_data) 我只是将三个属性中的一个放在post_数据中,这三个属性将被正确复制到表单中,但在“self_实例”中已经有值的其他两个属性将被设置为None。这能避免吗 谢谢, Richard您没有显示

我有一个使用“from google.appengine.ext.db.djangoforms.ModelForm”的post处理程序。它将现有实例拉入数据库,然后通过以下方式初始化表单:

  myForm = TestForm(instance=self_instance, data=post_data)
我只是将三个属性中的一个放在post_数据中,这三个属性将被正确复制到表单中,但在“self_实例”中已经有值的其他两个属性将被设置为None。这能避免吗

谢谢,
Richard

您没有显示表单定义。但是,一般来说,如果您不想在表单中包含字段,您应该在Meta
exclude
tuple中指定它们,这样它们就不会被不存在的POST数据覆盖

  • 如果您提供
    instance
    arg,则认为表单未绑定
  • 如果您提供
    数据
    arg,则认为表单已绑定
  • 如果同时提供这两个选项,
    数据
    将覆盖
    实例
    (=>与案例2相同,表单绑定)

    因此,在您的情况下,最好加载
    self\u实例
    ,然后使用
    数据更新它
    ,然后使用未绑定表单:

    myForm = TestForm(instance=self_instance)
    

    这就是我所追求的行为:

    if self_instance:
      logging.info('creating form with instance so updating the post data, we need this to bind the form so we can validate it')
      if post_data:
        #update the post data with existing values
        for prop in self_instance._properties:
          if prop not in post_data:
            cur_prop_val = getattr(self_instance, prop)
            if isinstance(cur_prop_val,db.Model):
              str(cur_prop_val.key())
            else:
              post_data[prop] = cur_prop_val
      else:
        logging.info('no post data so not adding it to form')
      form_data = form_class(data=post_data,instance=self_instance)
    else:
      logging.info('creating form without instance')
      form_data = form_class(data=post_data)  
    

    谢谢你澄清这一点。有没有一个简单的方法来更新数据?谢谢你的回答,如果我没有澄清这个问题,很抱歉。我不想排除任何字段,我是从一个厚客户端发布的,但它只是三个参数中的一个。默认行为似乎是将其他所有内容都设置为“无”,但我希望记住其他两个字段的实例值。