Mongoengine 连续使用 filter() 和 ReferenceField() 导致 "TypeError: 'Collection' object is not callable
有两个MongoEngine文档:
class A(Document):
a = StringField()
class B(Document):
b = StringField()
boolfield = BooleanField(default=False)
ref = ReferenceField(A)
我想先对一个特定的A对象进行filter()
操作,然后再从第一次查询的结果中,对布尔字段进行filter()
操作。但是这些代码行导致了一个错误:
a_objects = A.objects(a='test') # OK
query = B.objects(ref__in=a_objects) # OK
query2 = query.filter(boolfield=True) # FAILS
错误信息是:
TypeError: 'Collection' object is not callable. If you meant to call the '__deepcopy__' method on a 'Collection' object it is failing because no such method exists.
完整的代码和错误追踪信息可以在这里查看:https://gist.github.com/nferrari/4962245
谢谢!
1 个回答
1
看起来在0.7.8版本中,查询引用字段不能连着用,所以目前请使用字典,然后作为关键字参数传入,这样可以解决这个问题,比如:
a_objects = A.objects(a='test')
query_dict = {'ref__in': a_objects}
query_dict['boolfield'] = True
self.assertEquals(B.objects(**query_dict).count(), 1)
我已经添加了这个问题:https://github.com/MongoEngine/mongoengine/issues/234,希望在0.8版本中修复。