Pregunta

¿Alguien ha intentado seleccionar dinámicamente qué propiedades desea escribir en una entidad en appengine? Por ejemplo:

Tengo un formulario web con 5 campos, y cualquier usuario completará un subconjunto de esos campos. PUBLICO solo los campos con datos en el servidor (por ejemplo, Campos 1,2,4). En el lado del servidor, ¿cómo escribo elegantemente solo las propiedades 1,2 y 4? La clase Modelo tiene una función que devuelve un diccionario de nombres de propiedades (Model.properties ()), pero ¿cómo lo usaría para seleccionar nombres de propiedades?

En SQL, construiría una instrucción INSERT o UPDATE haciendo coincidir los campos POSTed contra el diccionario Model.properties (). Vería el código del módulo db en el SDK de Appengine, para ver si la clase Model tenía alguna colección de objetos Property, pero no puedo encontrar el módulo en mi disco (soy un poco nuevo en python y appengine).

Actualización: leí trunk / google / appengine / ext / db / init .py que confirmó que no hay forma de referirse a las propiedades como grupo. ¿Alguien sabe de una solución?

¿Alguna idea?

Actualización2: esta pregunta se respondió en el Grupo de Google para AppEngine: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#

¿Fue útil?

Solución

El módulo de Python se verá así:

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,}))

Su HTML debería verse así:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top