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))) 通常用于正确处理属性设置的类似功能。将您的内部循环更改为:

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 回答