1

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

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

В SQL я бы построил инструкцию INSERT или UPDATE, сопоставляя поля POSTed с словарем Model.properties(). Я бы посмотрел код модуля db в SDK Appengine, чтобы узнать, имел ли класс 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#

ответ

1

модуль питона будет выглядеть примерно так:

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>