Testcase layout:
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)
Output:
a_count: 1, b_count: 0 a_count: 0, b_count: 0 ... FAIL: testCount self.assertEquals(qs2.count(), 1) AssertionError: 0 != 1
Why? operator changes behavior like this, and how to fix it?
source share