Динамический выбор свойств для записи в хранилище данных Appengine

Кто-нибудь пытался динамически выбирать, какие свойства они хотят записать в сущность на appengine? Например:

У меня есть веб-форма с 5 полями, и любой пользователь заполнит некоторое подмножество этих полей. Я отправляю только поля с данными на сервер (например, поля 1,2,4). На стороне сервера, как мне элегантно написать только свойства 1,2 и 4? В классе Model есть функция, которая возвращает словарь имен свойств (Model.properties()), но как мне использовать ее для выбора имен свойств?

В SQL я бы построил оператор INSERT или UPDATE, сопоставив поля, отправленные POST, со словарем Model.properties(). Я бы посмотрел на код модуля db в Appengine SDK, чтобы увидеть, есть ли в классе Model некоторая коллекция объектов Property, но я не могу найти модуль на своем диске (я немного новичок в python и appengine).

Обновление: я прочитал файл trunk/google/appengine/ext/db/init.py, который подтвердил, что нельзя ссылаться на свойства как на группу. Кто-нибудь знает обходной путь?

Есть предположения?

Update2: ответ на этот вопрос был дан в группе Google для AppEngine: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#


person Community    schedule 23.01.2009    source источник


Ответы (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>
person Community    schedule 26.01.2009