#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.

Reply via email to