Appengine反向引用问题

5
根据文档:http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References,自动生成的反向引用对象是一个查询对象,因此可以对其进行迭代和调用获取函数。
但是: 我有一个模型:
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)

I get an exception like this:

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

或者像这样:
<type 'exceptions.AttributeError'>: '_ReverseReferenceProperty' object has no attribute 'fetch'

我做错了什么还是App Engine发生了一些变化? 我非常确定以前它的工作方式就像一个Query。 甚至在文档页面上有一个示例,展示了与我的用法相同的用例:

for obj in obj1.secondmodel_set:
    # ...

另外,获取没有反向引用的查询也可以正常工作:

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

你能否确定导致第一个异常的特定情况以及导致第二个异常的情况? - Adam Crossland
1个回答

1

两种方法(迭代和获取)都应该可行。为了调试,您可能想要记录日志(或打印):

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

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

只是为了查看对象包含什么...这可能会给你一些暗示,出了什么问题。

几个想法:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接