2010-12-27 1 views
4

Макет TestCase:Фильтрация с Q объекта на аннотированный QuerySet

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 

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

ответ

2

Похоже, что это еще open issue с версии 2.1.4.

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