【问题标题】:Appengine reverse reference problemAppengine反向引用问题
【发布时间】:2011-01-24 09:55:46
【问题描述】:

根据文档:http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References 自动创建的反向引用对象是一个 Query 对象,因此可能会对其进行迭代并进行 fetch 调用。

但是: 我有一个模型:

class User(db.Model):
   name = db.StringProperty()
   ...

第二个模型:

class Thing(db.Model):
    owner = db.ReferenceProperty(User)
    ...

当我尝试访问反向引用时:

for thing in user.thing_set:
    ...

或:

user.thing_set.fetch(100)

我遇到这样的异常:

<type 'exceptions.TypeError'>: '_ReverseReferenceProperty' object is not iterable

或者像这样:

<type 'exceptions.AttributeError'>: '_ReverseReferenceProperty' object has no attribute 'fetch'

是我做错了什么还是 appengine 发生了一些变化?我很确定以前它像查询一样工作。文档页面上甚至还有一个示例,显示的用法与我的相同:

for obj in obj1.secondmodel_set:
    # ...

另外获取没有反向引用的查询也可以:

things = Thing.all().filter('owner =', user)

【问题讨论】:

  • 你能找出导致第一个异常和第二个异常的任何特定情况吗?

标签: python google-app-engine google-cloud-datastore


【解决方案1】:

这两种方法(迭代和获取)都应该有效。要调试,您可能需要记录(或打印):

print dir(user)
[..., 'thing_set', ...]

print dir(user.thing_set)
[..., '__iter__', ... , 'fetch', ...]

只是为了看看对象包含什么...这可能会给你一个提示可能会出错的地方。

几个想法:

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2015-07-30
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多