2009-08-09 6 views
0

私は、次のコードを試してみました、それが動作しませんでした:Google App Engineのデータストアのエントリをオブジェクトの辞書で更新することはできますか?

class SourceUpdate(webapp.RequestHandler): 
    def post(self): 
    id = int(self.request.get('id')) 
    source = Source.get_by_id(id) 
    for property in self.request.arguments(): 
     if property != 'id': 
     source.__dict__[property] = self.request.get(property) 
    source.put() 
    self.redirect('/source') 

私は必要なすべてのプロパティを掲示していますが、エントリが更新されず、エラーが表示されません。それを修正するには?

ところで

class Source(db.Model): 
    #some string properties 

答えて

2

あなたは、通常の属性設定を適切に対処するために使用しているモデルのメタクラス(type(type(source))__setattr__様な機能をバイパスしています。あなたの内側のループを変更します。

for property in self.request.arguments(): 
    if property != 'id': 
    setattr(source, property, self.request.get(property)) 

と(それはあなたがrequest.getから買ってあげるものですので、プロパティのすべてのタイプが正しく、文字列から設定することができた場合)すべてが動作するはずです。

2

要求からモデル値を直接設定する代わりに、Djangoフォームを使用して調べることができます。それらはApp Engineにバンドルされており、フォームデータの検証とデータストアへの格納、フォームHTMLの生成を容易にします。 App Engineデータストアhereでそれらを使用する方法に関する記事があります。

また、GETリクエストに基づいて変更することは、ほとんどの場合、悪い考えであり、XSRFの脆弱性やその他の問題につながることを忘れないでください!

関連する問題