def test_getitem(self): qs = TestObj.objects.filter(int_value__lt=50) pqs = PredicateQuerySet(qs) self.assertEqual(qs.count(), pqs.count()) for i in range(qs.count()): self.assertEqual(qs[i], pqs[i]) for i in range(qs.count()): for j in range(i + 1, qs.count()): self.assertEqual(list(qs[i:j]), list(pqs[i:j]))
def test_and(self): qs1 = TestObj.objects.filter(int_value__lt=50) qs2 = TestObj.objects.filter(int_value__gte=25) merged_qs = qs1 & qs2 pqs1 = PredicateQuerySet(qs1) pqs2 = PredicateQuerySet(qs2) merged_pqs = pqs1 & pqs2 self.assertResultsEqual(merged_qs, merged_pqs) char_filter = {'char_value__icontains': 'red'} merged_qs = qs1.filter(**char_filter) & qs2.filter(**char_filter) merged_pqs = pqs1.filter(**char_filter) & pqs2.filter(**char_filter) self.assertResultsEqual(merged_qs, merged_pqs)
def __init__(self, queryset, predicatequeryset=None): """ Args: queryset (django.db.models.QuerySet) """ self.qs = queryset self.pqs = predicatequeryset or PredicateQuerySet(queryset)