0

大多数情况下,您从模型属性中获得的错误会在您保存数据时发生。例如,如果您尝试将字符串保存为 IntegerProperty,则会导致错误。

一个例外(没有双关语)是 ReferenceProperty。如果你有很多引用并且你没有完全小心留下错误的引用,那么通常会遇到类似“TemplateSyntaxError: Caught an exception while rendering: ReferenceProperty failed to be resolved”之类的错误。

这是如果视图中只有一个错误的参考。哦。

我可以编写一个 try/except 块来尝试访问所有引用属性并在引发异常时删除它们,但是如果有比我更通用的方法,这个功能肯定对许多其他开发人员有用能写。我想它会采用模型类型列表并尝试访问每个模型中每个实体的每个引用属性,如果引发异常,则将该属性设置为 None 。

我会看看我自己是否可以做到这一点,但有一些建议/片段让我开始肯定会有所帮助。

4

3 回答 3

1

我的项目也有类似的困难。当我编写我的应用程序的 beta 版本时,我确实创建了很多死链接,之后理清事情真的很痛苦。理想情况下,该工具还必须报告有问题的引用,以便您可以查明代码中的问题。

于 2008-12-15T02:18:47.723 回答
0

该异常实际上是一个等待修复一段时间的错误(请参阅http://code.google.com/p/googleappengine/issues/detail?id=426)。理想情况下,您应该能够像这样测试引用是否有效(来自应用引擎文档):

obj1 = db.get(obj2.reference)

if not obj1:
  # Referenced entity was deleted.
于 2010-01-28T03:51:19.057 回答
0

您可以扩展和自定义 ReferenceProperty 以不引发此异常,但随后它需要返回一些东西 - 大概是 None - 在这种情况下,当您的模板尝试访问返回对象的属性时,它只会抛出一个异常。

更好的方法是在渲染模板之前获取引用属性并检查它是否有效。ReferenceProperties 缓存它们的引用,因此预取不会导致额外的数据存储调用。

于 2008-12-17T11:07:12.273 回答