Question

Quelqu'un a-t-il essayé de sélectionner dynamiquement les propriétés qu'il souhaitait écrire sur une entité dans Appengine? Par exemple:

J'ai un formulaire Web avec 5 champs, et tout utilisateur donné remplira un sous-ensemble de ces champs. Je poste uniquement les champs contenant des données sur le serveur (par exemple, champs 1, 2, 4). Du côté du serveur, comment puis-je écrire élégamment uniquement les propriétés 1, 2 et 4? La classe Model a une fonction qui renvoie un dictionnaire de noms de propriétés (Model.properties ()), mais comment l'utiliser pour sélectionner des noms de propriétés?

En SQL, je construisais une instruction INSERT ou UPDATE en comparant les champs POST avec le dictionnaire Model.properties (). Je regarderais le code de module de base de données dans le SDK d'Appengine, pour voir si la classe Model avait une collection d'objets Property, mais je ne trouve pas le module sur mon disque (je suis un peu nouveau pour python et appengine).

Mise à jour: j'ai lu le fichier trunk / google / appengine / ext / db / init .py, qui confirme qu'il est impossible de faire référence aux propriétés en tant que groupe. Quelqu'un connaît une solution de contournement?

Avez-vous des idées?

Update2: le groupe Google pour AppEngine a répondu à cette question: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#

Était-ce utile?

La solution

Le module python ressemblera à quelque chose comme ceci:

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

Votre code HTML devrait ressembler à ceci:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top