0

次のコードを試しましたが、うまくいきませんでした:

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
4

2 に答える 2

2

__setattr__モデルのメタクラス(type(type(source)))が属性設定を適切に処理するために通常使用している-like機能をバイパスしています。内部ループを次のように変更します。

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

そして、すべてが機能するはずです(文字列からすべてのタイプのプロパティを適切に設定できる場合は、それが取得されるためですrequest.get)。

于 2009-08-09T19:55:12.983 に答える
2

リクエストからモデル値を直接設定する代わりに、Django フォームの使用を検討することをお勧めします。これらは App Engine にバンドルされており、フォーム データの検証とデータストアへの保存、およびフォーム HTML の生成を容易にします。App Engine データストアでそれらを使用する方法に関する記事がここにあります

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

于 2009-08-10T07:51:09.840 に答える