Dinamicamente escolher quais propriedades de escrever para Appengine Datastore
-
19-08-2019 - |
Pergunta
Alguém já tentou selecionar dinamicamente as propriedades que eles querem escrever a uma entidade em appengine? Por exemplo:
Eu tenho um formulário web com 5 campos, e qualquer usuário irá preencher algum subconjunto desses campos. Eu postar apenas os campos com dados para o servidor (por exemplo, campos 1,2,4). No lado do servidor, como eu elegantemente escrever apenas as propriedades 1,2 e 4? A classe Modelo tem uma função que retorna um dicionário de nomes de propriedades (Model.properties ()), mas como eu iria usá-lo para selecionar nomes de propriedade?
No SQL, eu iria construir uma instrução INSERT ou UPDATE, combinando os campos POSTed contra os Model.properties () dicionário. Eu olhava para o código do módulo db na Appengine SDK, para ver se a classe Modelo tinha alguma coleção de objetos de propriedade, mas não consigo encontrar o módulo no meu disco (eu sou um pouco novo para python e appengine).
Update: Eu li trunk / google / appengine / ext / db / init .py que confirmou que não há nenhuma maneira de se referir às propriedades como um grupo. Alguém sabe de uma solução alternativa?
Qualquer pensamento?
Update2: Esta pergunta foi respondida no Grupo Google para AppEngine: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#
Solução
O módulo python será algo parecido com isto:
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,}))
O seu HTML deve ser algo como isto:
<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>