Python 在google appengine上使用django初始化带有数据的表单
我有一个使用“from google.appengine.ext.db.djangoforms.ModelForm”的post处理程序。它将现有实例拉入数据库,然后通过以下方式初始化表单: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您没有显示
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)
谢谢你澄清这一点。有没有一个简单的方法来更新数据?谢谢你的回答,如果我没有澄清这个问题,很抱歉。我不想排除任何字段,我是从一个厚客户端发布的,但它只是三个参数中的一个。默认行为似乎是将其他所有内容都设置为“无”,但我希望记住其他两个字段的实例值。