mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #31039 -- Added support for contained_by lookup with AutoFields, SmallIntegerField, and DecimalField.
This commit is contained in:
committed by
Mariusz Felisiak
parent
664521c56a
commit
5d674eac87
@@ -124,6 +124,20 @@ class Migration(migrations.Migration):
|
||||
options=None,
|
||||
bases=None,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SmallAutoFieldModel',
|
||||
fields=[
|
||||
('id', models.SmallAutoField(verbose_name='ID', serialize=False, primary_key=True)),
|
||||
],
|
||||
options=None,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='BigAutoFieldModel',
|
||||
fields=[
|
||||
('id', models.BigAutoField(verbose_name='ID', serialize=False, primary_key=True)),
|
||||
],
|
||||
options=None,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Scene',
|
||||
fields=[
|
||||
@@ -237,6 +251,8 @@ class Migration(migrations.Migration):
|
||||
('float', models.FloatField(blank=True, null=True)),
|
||||
('timestamp', models.DateTimeField(blank=True, null=True)),
|
||||
('date', models.DateField(blank=True, null=True)),
|
||||
('small_integer', models.SmallIntegerField(blank=True, null=True)),
|
||||
('decimal_field', models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)),
|
||||
],
|
||||
options={
|
||||
'required_db_vendor': 'postgresql',
|
||||
|
||||
@@ -93,6 +93,14 @@ class TextFieldModel(models.Model):
|
||||
return self.field
|
||||
|
||||
|
||||
class SmallAutoFieldModel(models.Model):
|
||||
id = models.SmallAutoField(primary_key=True)
|
||||
|
||||
|
||||
class BigAutoFieldModel(models.Model):
|
||||
id = models.BigAutoField(primary_key=True)
|
||||
|
||||
|
||||
# Scene/Character/Line models are used to test full text search. They're
|
||||
# populated with content from Monty Python and the Holy Grail.
|
||||
class Scene(models.Model):
|
||||
@@ -148,6 +156,8 @@ class RangeLookupsModel(PostgreSQLModel):
|
||||
float = models.FloatField(blank=True, null=True)
|
||||
timestamp = models.DateTimeField(blank=True, null=True)
|
||||
date = models.DateField(blank=True, null=True)
|
||||
small_integer = models.SmallIntegerField(blank=True, null=True)
|
||||
decimal_field = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
|
||||
|
||||
|
||||
class JSONModel(PostgreSQLModel):
|
||||
|
||||
@@ -11,7 +11,10 @@ from django.test.utils import isolate_apps
|
||||
from django.utils import timezone
|
||||
|
||||
from . import PostgreSQLSimpleTestCase, PostgreSQLTestCase
|
||||
from .models import PostgreSQLModel, RangeLookupsModel, RangesModel
|
||||
from .models import (
|
||||
BigAutoFieldModel, PostgreSQLModel, RangeLookupsModel, RangesModel,
|
||||
SmallAutoFieldModel,
|
||||
)
|
||||
|
||||
try:
|
||||
from psycopg2.extras import DateRange, DateTimeTZRange, NumericRange
|
||||
@@ -354,6 +357,17 @@ class TestQueryingWithRanges(PostgreSQLTestCase):
|
||||
[objs[0]],
|
||||
)
|
||||
|
||||
def test_small_integer_field_contained_by(self):
|
||||
objs = [
|
||||
RangeLookupsModel.objects.create(small_integer=8),
|
||||
RangeLookupsModel.objects.create(small_integer=4),
|
||||
RangeLookupsModel.objects.create(small_integer=-1),
|
||||
]
|
||||
self.assertSequenceEqual(
|
||||
RangeLookupsModel.objects.filter(small_integer__contained_by=NumericRange(4, 6)),
|
||||
[objs[1]],
|
||||
)
|
||||
|
||||
def test_integer_range(self):
|
||||
objs = [
|
||||
RangeLookupsModel.objects.create(integer=5),
|
||||
@@ -376,6 +390,19 @@ class TestQueryingWithRanges(PostgreSQLTestCase):
|
||||
[objs[0]]
|
||||
)
|
||||
|
||||
def test_decimal_field_contained_by(self):
|
||||
objs = [
|
||||
RangeLookupsModel.objects.create(decimal_field=Decimal('1.33')),
|
||||
RangeLookupsModel.objects.create(decimal_field=Decimal('2.88')),
|
||||
RangeLookupsModel.objects.create(decimal_field=Decimal('99.17')),
|
||||
]
|
||||
self.assertSequenceEqual(
|
||||
RangeLookupsModel.objects.filter(
|
||||
decimal_field__contained_by=NumericRange(Decimal('1.89'), Decimal('7.91')),
|
||||
),
|
||||
[objs[1]],
|
||||
)
|
||||
|
||||
def test_float_range(self):
|
||||
objs = [
|
||||
RangeLookupsModel.objects.create(float=5),
|
||||
@@ -387,6 +414,39 @@ class TestQueryingWithRanges(PostgreSQLTestCase):
|
||||
[objs[0]]
|
||||
)
|
||||
|
||||
def test_small_auto_field_contained_by(self):
|
||||
objs = SmallAutoFieldModel.objects.bulk_create([
|
||||
SmallAutoFieldModel() for i in range(1, 5)
|
||||
])
|
||||
self.assertSequenceEqual(
|
||||
SmallAutoFieldModel.objects.filter(
|
||||
id__contained_by=NumericRange(objs[1].pk, objs[3].pk),
|
||||
),
|
||||
objs[1:3],
|
||||
)
|
||||
|
||||
def test_auto_field_contained_by(self):
|
||||
objs = RangeLookupsModel.objects.bulk_create([
|
||||
RangeLookupsModel() for i in range(1, 5)
|
||||
])
|
||||
self.assertSequenceEqual(
|
||||
RangeLookupsModel.objects.filter(
|
||||
id__contained_by=NumericRange(objs[1].pk, objs[3].pk),
|
||||
),
|
||||
objs[1:3],
|
||||
)
|
||||
|
||||
def test_big_auto_field_contained_by(self):
|
||||
objs = BigAutoFieldModel.objects.bulk_create([
|
||||
BigAutoFieldModel() for i in range(1, 5)
|
||||
])
|
||||
self.assertSequenceEqual(
|
||||
BigAutoFieldModel.objects.filter(
|
||||
id__contained_by=NumericRange(objs[1].pk, objs[3].pk),
|
||||
),
|
||||
objs[1:3],
|
||||
)
|
||||
|
||||
def test_f_ranges(self):
|
||||
parent = RangesModel.objects.create(decimals=NumericRange(0, 10))
|
||||
objs = [
|
||||
|
||||
Reference in New Issue
Block a user