2013-02-15 41 views
1

擁有這些2 MongoEngine文件:Mongoengine鏈濾波器()和ReferenceField()會導致「類型錯誤:‘集合’對象不是可調用」

class A(Document): 
    a = StringField() 

class B(Document): 
    b = StringField() 
    boolfield = BooleanField(default=False) 
    ref = ReferenceField(A) 

我想先filter()特定目的上,然後從第一個查詢開始,BooleanField上的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

謝謝!

+0

什麼版本的mongoengine和pymongo? – Ross 2013-02-15 19:48:15

+0

mongoengine 0.7.8,pymongo 2.4.2 – 2013-02-15 20:37:28

回答

1

似乎查詢參考字段無法在0.7.8被鏈接 - 所以暫時請使用字典,然後傳遞作爲kwargs作爲工作輪如:

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

+0

感謝您的回答。事實上,問題通過使用字典和傳遞kwargs來解決。 – 2013-02-21 15:50:42

相關問題