代码之家  ›  专栏  ›  技术社区  ›  Jader Dias

是否可以通过对象的字典更新Google应用程序引擎数据存储区中的条目?

  •  0
  • Jader Dias  · 技术社区  · 15 年前

    我尝试了以下代码,但它不起作用:

    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 回复  |  直到 14 年前
        1
  •  2
  •   Alex Martelli    15 年前

    你绕过了 __setattr__ -类似于模型的元类( type(type(source)) )通常用于正确处理属性设置。将内部循环更改为:

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

    一切都应该正常工作(如果所有类型的属性都可以从一个字符串中正确设置,因为这就是您将要得到的 request.get )

        2
  •  2
  •   Nick Johnson    15 年前

    您可能希望使用django表单,而不是直接从请求中设置模型值。它们与应用程序引擎捆绑在一起,便于验证表单数据并将其存储在数据存储中,以及生成表单HTML。有一篇关于如何在应用引擎数据存储中使用它们的文章 here .

    另外,不要忘记,根据GET请求进行更改几乎总是一个坏主意,并且会导致XSRF漏洞和其他问题!