Фильтрация с помощью объекта Q на аннотированном QuerySet - PullRequest
4 голосов
/ 27 декабря 2010

Макет тестового примера:

def testCount(self):
    qs = Test.objects.all()
    qs = qs.annotate(a_count=Count('a_items'), b_count=Count('b_items'))
    for item in qs:
        print 'a_count: %d, b_count: %d' % (item.a_count, item.b_count)
    qs1 = qs.filter(Q(a_count__gt=0))
    self.assertEquals(qs1.count(), 1)
    qs2 = qs.filter(Q(a_count__gt=0) | Q(b_count__gt=0))
    self.assertEquals(qs2.count(), 1)

Выход:

a_count: 1, b_count: 0
a_count: 0, b_count: 0
...
FAIL: testCount 
    self.assertEquals(qs2.count(), 1)
AssertionError: 0 != 1

Почему | оператор меняет поведение вот так и как мне это исправить?

1 Ответ

2 голосов
/ 03 января 2011

Похоже, что это все еще открытый выпуск на v1.2.4.

Я думаю, вы бы протестировали один из поставленных патчей в отчете об ошибке или прибегнуть к необработанным запросам , пока он не будет официально исправлен.

...