#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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. 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.