我尝试了以下代码但它无效:
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
答案 0 :(得分:2)
您正在绕过模型'元类(__setattr__
)通常用于正确处理属性设置的type(type(source))
类功能。将内循环更改为:
for property in self.request.arguments():
if property != 'id':
setattr(source, property, self.request.get(property))
并且一切都应该有效(如果可以从字符串中正确设置所有类型的属性,因为这是您从request.get
获得的内容)。
答案 1 :(得分:2)
您可能希望研究使用Django表单,而不是直接从请求中设置模型值。它们与App Engine捆绑在一起,便于验证表单数据并将其存储在数据存储区中,以及生成表单HTML。有一篇关于如何将它们与App Engine数据存储区here一起使用的文章。
另外,不要忘记基于GET请求进行更改几乎总是一个坏主意,并导致XSRF漏洞和其他问题!