def test_multiple_key_subset_querying(self): for model in (models.Item, models.GeoItem): self._create_items(model) for keys in (['a'], ['a', 'b']): self.assertEqual( model.objects.filter(HQ(data__contains=keys)).count(), 3) for keys in (['a', 'z'], ['z', 'y']): self.assertEqual( model.objects.filter(HQ(data__contains=keys)).count(), 0)
def test_single_key_querying(self): for model in (models.Item, models.GeoItem): self._create_items(model) for key in ('a', 'b'): self.assertEqual( model.objects.filter(HQ(data__contains=key)).count(), 3) for key in ('y', 'z'): self.assertEqual( model.objects.filter(HQ(data__contains=key)).count(), 0)
def test_key_value_subset_querying(self): for model in (models.Item, models.GeoItem): for item in self._create_items(model): r = model.objects.filter(HQ(data__a=item.data['a'])) self.assertEqual(len(r), 1) self.assertEqual(r[0], item) r = model.objects.filter( HQ(data__a=item.data['a'], data__b=item.data['b'])) self.assertEqual(len(r), 1) self.assertEqual(r[0], item)
def test_float_range_query(self): for model in (models.Item, models.GeoItem): self._create_items(model) self.assertEqual( model.objects.filter(HQ(data__c__lt=0.33)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__c__lte=0.33)).count(), 2) self.assertEqual( model.objects.filter(HQ(data__c__gt=0.33)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__c__gte=0.33)).count(), 2)
def test_in_query(self): for model in (models.Item, models.GeoItem): self._create_items(model) self.assertEqual( model.objects.filter(HQ(data__a__in=['0'])).count(), 0) self.assertEqual( model.objects.filter(HQ(data__a__in=['1'])).count(), 1) self.assertEqual( model.objects.filter(HQ(data__a__in=['1', '2'])).count(), 2) self.assertEqual( model.objects.filter(HQ(data__a__in=['1', '2', '3'])).count(), 3)
def test_related_query(self): a = models.Item.objects.create(name='a', data={ 'a': '1', 'b': '4', 'c': '0', 'd': '2012-01-01 00:01', 'e': '2012-01-01', 'f': '00:01' }) models.Related.objects.create(item=a) self.assertEqual( models.Related.objects.filter(HQ(item__data__a=1)).count(), 1) self.assertEqual( models.Related.objects.filter(HQ(item__data__a=2)).count(), 0)
def test_combine_hq(self): self._create_items(models.Item) self.assertEqual( models.Item.objects.filter(HQ(data__a='1') & HQ(data__a='2')).count(), 0) self.assertEqual( models.Item.objects.filter(HQ(data__a='1') | HQ(data__a='2')).count(), 2) self.assertEqual( models.Item.objects.filter(HQ(data__a__lt=3) & ~HQ(data__a='2')).count(), 1) self.assertEqual( models.Item.objects.filter(Q(name='a') & Q(HQ(data__a='1'))).count(), 1)
def test_time_range_query(self): for model in (models.Item, models.GeoItem): self._create_items(model) self.assertEqual( model.objects.filter( HQ(data__f__lt=datetime.time(0, 0))).count(), 0) self.assertEqual( model.objects.filter( HQ(data__f__gt=datetime.time(23, 0))).count(), 0) d = datetime.time(1, 30) self.assertEqual( model.objects.filter(HQ(data__f__lt=d)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__f__lte=d)).count(), 2) self.assertEqual( model.objects.filter(HQ(data__f__gt=d)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__f__gte=d)).count(), 2)
def test_date_range_query(self): for model in (models.Item, models.GeoItem): self._create_items(model) self.assertEqual( model.objects.filter( HQ(data__e__lt=datetime.date(2011, 12, 31))).count(), 0) self.assertEqual( model.objects.filter( HQ(data__e__gt=datetime.date(2012, 3, 1))).count(), 0) d = datetime.date(2012, 1, 2) self.assertEqual( model.objects.filter(HQ(data__e__lt=d)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__e__lte=d)).count(), 2) self.assertEqual( model.objects.filter(HQ(data__e__gt=d)).count(), 1) self.assertEqual( model.objects.filter(HQ(data__e__gte=d)).count(), 2)