Динамически выбирайте, какие свойства записывать в Appengine Datastore
-
19-08-2019 - |
Вопрос
Кто-нибудь пытался динамически выбирать, какие свойства они хотят записать в сущность в appengine? Например:
У меня есть веб-форма с 5 полями, и любой пользователь заполнит некоторое подмножество этих полей. Я размещаю только поля с данными на сервере (например, поля 1,2,4). На стороне сервера, как мне элегантно написать только свойства 1,2 и 4? В классе Model есть функция, которая возвращает словарь имен свойств (Model.properties ()), но как мне использовать его для выбора имен свойств?
В SQL я бы построил оператор INSERT или UPDATE, сопоставив поля POSTed со словарем Model.properties (). Я хотел бы взглянуть на код модуля db в Appengine SDK, чтобы увидеть, есть ли в классе Model некоторая коллекция объектов Property, но я не могу найти модуль на своем диске (я немного новичок в python и appengine). р>
Обновление: я прочитал trunk / google / appengine / ext / db / init .py, который подтвердил, что нельзя ссылаться на свойства как на группу. Кто-нибудь знает об обходном пути?
Есть мысли?
Обновление 2: на этот вопрос был дан ответ в Группе Google для AppEngine: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e# р>
Решение
Модуль 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>