有没有办法获取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>
答案 0 :(得分:13)
实际上,您提倡访问ReferenceProperty的密钥的方式将来可能不存在。在python中以'_'开头的属性通常被认为是“受保护的”,因为与其实现紧密绑定并且与其实现密切相关的事物可以使用它们,但是随着实现更新的内容必须在其更改时发生变化。
但是,通过公共界面可以访问您的reference-property的密钥,以便将来安全。我将修改上面的例子:
class Comment(db.Model):
series = db.ReferenceProperty(reference_class=Series);
def series_id(self):
return Comment.series.get_value_for_datastore(self)
当您通过与之关联的类访问属性时,您将获得属性对象本身,该对象具有可以获取基础值的公共方法。
答案 1 :(得分:1)
你是对的 - 密钥存储为前缀为“_”的属性名称。您应该只能在模型对象上直接访问它。你能证明你在尝试什么吗?我过去使用过这种技术没有任何问题。
编辑:您是否尝试直接调用series_id()或直接在模板中引用_series?我不确定如果你在这个上下文中指定它们,Django是否会自动调用没有参数的方法。您也可以尝试将@property装饰器放在方法上。