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#

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top