Domanda

Qualcuno ha provato a selezionare dinamicamente quali proprietà vogliono scrivere su un'entità su appengine? Ad esempio:

Ho un modulo web con 5 campi e ogni dato utente compilerà un sottoinsieme di quei campi. POSTO solo i campi con dati al server (ad es. Campi 1,2,4). Sul lato server, come scrivo elegantemente solo le proprietà 1,2 e 4? La classe Model ha una funzione che restituisce un dizionario di nomi di proprietà (Model.properties ()), ma come lo userei per selezionare i nomi di proprietà?

In SQL, vorrei creare un'istruzione INSERT o UPDATE abbinando i campi POSTed rispetto al dizionario Model.properties (). Vorrei esaminare il codice del modulo db nell'SDK di Appengine, per vedere se la classe Model aveva una raccolta di oggetti Property, ma non trovo il modulo sul mio disco (sono un po 'nuovo su Python e Appengine).

Aggiornamento: ho letto trunk / google / appengine / ext / db / init .py che ha confermato che non c'è modo di fare riferimento alle proprietà come gruppo. Qualcuno sa di una soluzione alternativa?

Qualche idea?

Aggiornamento2: a questa domanda è stata data una risposta sul gruppo Google per AppEngine: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#

È stato utile?

Soluzione

Il modulo python sarà simile a questo:

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

Il tuo HTML dovrebbe essere simile a questo:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top