【问题标题】:Dynamically choose which properties to write to Appengine Datastore动态选择要写入 Appengine 数据存储区的属性
【发布时间】:2009-01-23 04:36:11
【问题描述】:

有没有人尝试过动态选择他们想在 appengine 上写入实体的属性?例如:

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

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

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

有什么想法吗?

更新 2:此问题已在 AppEngine 的 Google 群组中得到解答:http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      相关资源
      最近更新 更多