#25774: Refactor of datetime expressions and better, official support for right-
hand-side date part extraction
-------------------------------------+-------------------------------------
Reporter: ryuusenshi | Owner: nobody
Type: New feature | Status: new
Component: Database layer | Version: master
(models, ORM) | Keywords:
Severity: Normal |
db,expressions,date,time,extract,transform
Triage Stage: Unreviewed | Has patch: 1
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
As previously stated in [https://code.djangoproject.com/ticket/25556 this
ticket] and [https://groups.google.com/forum/#!topic/django-
developers/GU8OrPUMjrc this thread], I have begun work on the following:
- making the so called datetime transforms (currently residing in
`django.db.models.lookups`) part of the officially supported ORM API as
part of the db expressions,
- making these transforms easily usable on the right hand side of
lookups / Q objects
[[BR]]
To this effect, I propose the following:
- replace module `django.db.models.expressions` with a package of the
same name
- add module `django.db.models.expressions.datetimes`
- rename `XTransform` to `XExtract` and move them from
`django.db.models.lookups` to `django.db.models.lookups` to
`django.db.models.expressions.datetimes`
- change `YearLookup` and `YearComparisonLookup` to allow for
functions on the right hand side
- extensive testing of these db expressions
- adding this to the release notes
- any other change that might support this
[[BR]]
I'm also adding a [PR] with some of these already implemented. What
remains to be done is:
- replace references `XTransform` type classes in
`django.db.models.lookups` with `XExtract` classes from
`django.db.models.expressions.datetimes`
- replace these references anywhere else in the project (I've noticed
there are some in the tests, for instance)
[[BR]]
With the API in the [PR] it becomes possible to do the following lookup:
{{{
from django.db.models.expressions.datetimes import DateExtract
Person.objects.filter(birth_date__year=DateExtract('job__start_date',
lookup_name='year'))
}}}
which is equivalent to:
{{{
from django.db.models.expressions.datetimes import YearExtract
Person.objects.filter(birth_date__year=YearExtract('job__start_date'))
}}}
Additionally, @jarshwah suggested that these should maybe be named:
`ExtractX` instead of `XExtract`.
--
Ticket URL: <https://code.djangoproject.com/ticket/25774>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/053.620e37d849ab84879808218d83e446cf%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.