Opened 9 years ago
Last modified 3 years ago
#24991 closed Bug
Range types not properly converted to SQL in QuerySet.query.__str__() — at Initial Version
Reported by: | Villiers Strauss | Owned by: | |
---|---|---|---|
Component: | contrib.postgres | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
The string representation of the QuerySet.query
object, which is useful in debugging, does not convert range types to their SQL equivalents, instead it just displays the string representation of the range type.
>>> import datetime >>> from django.utils.timezone import utc >>> from psycopg.extras import NumericRange, DateRange, DateTimeTZRange >>> from myapp.models import MyModel # model defintion is irrelevant >>> print(MyModel.objects.filter(num_rng__overlap=NumericRange(1, 5))) SELECT [...] FROM "myapp_mymodel" WHERE ("myapp_mymodel"."num_rng" && NumericRange(1, 5, '[)')) >>> print(MyModel.objects.filter(date_rng__overlap=DateRange(datetime.date(2015, 5, 1), datetime.date(2015, 6, 1)))) SELECT [...] FROM "myapp_mymodel" WHERE ("myapp_mymodel"."date_rng" && DateRange(datetime.date(2015, 5, 1), datetime.date(2015, 6, 1), '[)')) >>> print(MyModel.objects.filter(dt_rng__overlap=DateTimeTZRange(datetime.datetime(2015, 5, 1, tzinfo=utc), datetime.datetime(2015, 6, 1, tzinfo=utc)))) SELECT [...] FROM "myapp_mymodel" WHERE ("myapp_mymodel"."dt_rng" && DateTimeTZRange(datetime.datetime(2015, 5, 1, 0, 0, tzinfo=<UTC>), datetime.datetime(2015, 6, 1, 0, 0, tzinfo=<UTC>), '[)'))
The expected output is numrange(1.0, 5.0)
, daterange('2015-05-01', '2015-06-01')
and tstzrange('2015-05-01 00:00:00+00:00', '2015-06-01 00:00:00+00:00')
respectively.
Note:
See TracTickets
for help on using tickets.