如何在没有数据库命中的情况下获取db.ReferenceProperty的键值?
时间:2020-03-06 14:48:32 来源:igfitidea点击:
有没有一种方法可以获取db.ReferenceProperty的键(或者ID)值,而不必取消引用它所指向的实际实体?我一直在研究它看起来像是将密钥存储为以_开头的属性名称,但是我一直无法使任何代码正常工作。示例将不胜感激。谢谢。
编辑:这是我尝试失败的内容:
class Comment(db.Model): series = db.ReferenceProperty(reference_class=Series); def series_id(self): return self._series
在我的模板中:
<a href="games/view-series.html?series={{comment.series_id}}#comm{{comment.key.id}}">more</a>
结果:
<a href="games/view-series.html?series=#comm59">more</a>
解决方案
我们正确地将密钥存储为以" _"为前缀的属性名称。我们应该只能够直接在模型对象上访问它。你能证明你在尝试什么吗?过去,我没有任何问题地使用过这种技术。
编辑:我们是否尝试过直接调用series_id()或者直接在模板中引用_series?我不确定如果在此上下文中指定它们,Django是否会自动调用不带参数的方法。我们也可以尝试将@property装饰器放在方法上。
实际上,我们提倡访问ReferenceProperty的密钥的方式将来可能完全不存在。在python中以" _"开头的属性通常被认为是"受保护的",因为与实现紧密联系并紧密联系的事物可以使用它们,但是随着实现而更新的事物必须在其更改时更改。
但是,有一种方法可以通过公共界面访问参考属性密钥,以便将来使用它是安全的。我将修改上面的示例:
class Comment(db.Model): series = db.ReferenceProperty(reference_class=Series); def series_id(self): return Comment.series.get_value_for_datastore(self)
通过类关联的属性访问属性时,我们将获得属性对象本身,该对象具有可获取基础值的公共方法。