动态选择要写入Appengine Datastore的属性

时间:2009-01-23 04:36:12

标签: database google-app-engine module google-cloud-datastore gae-module

是否有人试图动态选择要在appengine上写入实体的属性?例如:

我有一个包含5个字段的Web表单,任何给定的用户都会填写这些字段的某些子集。我只将包含数据的字段发布到服务器(例如字段1,2,4)。在服务器端,如何优雅地只写入属性1,2和4? Model类有一个返回属性名称字典的函数(Model.properties()),但是如何使用它来选择属性名?

在SQL中,我将通过匹配针对Model.properties()字典的POST字段来构建INSERT或UPDATE语句。我会看一下Appengine SDK中的db模块代码,看看Model类是否有一些Property对象的集合,但我在磁盘上找不到该模块(我对python和appengine有点新)。

更新:我读了trunk / google / appengine / ext / db / init .py,确认没有办法将这些属性作为一个组引用。有人知道解决方法吗?

有什么想法吗?

更新2:Google Group for AppEngine回答了这个问题:http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#

1 个答案:

答案 0 :(得分:1)

python模块看起来像这样:

from google.appengine.ext.db import Key
from google.appengine.api.datastore import Get, Put

def edit_item(request, db_id):

    objKey = Key(str(db_id))

    if request.method == 'POST':
        objEntity = Get(objKey)
        for k, v in request.POST.iteritems():
             objEntity[k]=v
        Put(objEntity)
        return HttpResponseRedirect('/')

    query = TestModel.get(objKey)
    return render_to_response('edit.html', ({'modify_data': query,}))

您的HTML应如下所示:

<form method="POST" action="." enctype="multipart/form-data">
  Title: <input type="text" name="title" value="{{modify_data.field1}}"/>
  Text: <input type="text" name="txt" value="{{modify_data.field2}}"/>

  <input type="submit"/>
</form>