Appengine Datastoreに書き込むプロパティを動的に選択する
-
19-08-2019 - |
質問
appengineのエンティティに書き込むプロパティを動的に選択しようとした人はいますか?例:
5つのフィールドを持つWebフォームがあり、特定のユーザーがそれらのフィールドのサブセットを入力します。サーバーにデータを含むフィールドのみをPOSTします(Fields 1,2,4など)。サーバー側で、プロパティ1、2、および4のみをエレガントに記述する方法を教えてください。 Modelクラスには、プロパティ名のディクショナリ(Model.properties())を返す関数がありますが、それを使用してプロパティ名を選択するにはどうすればよいですか?
SQLでは、POSTされたフィールドをModel.properties()ディクショナリと照合して、INSERTまたはUPDATEステートメントを作成します。 ModelクラスにPropertyオブジェクトのコレクションが含まれているかどうかを確認するために、Appengine SDKのdbモジュールコードを調べますが、ディスク上にモジュールが見つかりません(Pythonとappengineには少し慣れていません)。
更新:trunk / google / appengine / ext / db / init .pyを読んで、プロパティをグループとして参照する方法がないことを確認しました。誰かが回避策を知っていますか?
何か考えはありますか
Update2:この質問はAppEngineのGoogleグループで回答されました: http://groups.google.com/group/google-appengine/browse_thread/thread/b50be862f6d94b6e#
解決
pythonモジュールは次のようになります。
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,}))
HTMLは次のようになります。
<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>