1

次の 2 つの MongoEngine ドキュメントがあります。

class A(Document):
    a = StringField()

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

filter()最初に特定の A オブジェクトを処理し、次に最初のクエリからfilter()BooleanFieldを処理したいと思います。しかし、これらの行はエラーを引き起こします:

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

ありがとう!

4

1 に答える 1

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/2340.8で修正予定

于 2013-02-20T14:36:44.130 に答える