#25591: Cannot QuerySet.update DateRangeField using F() expressions
-------------------------------+--------------------
Reporter: synotna | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------
It is not currently possible to QuerySet.update a DateRangeField using F()
expressions - should it be?
{{{
class MyModel(models.Model):
date_from = models.DateField()
date_to = models.DateField()
period = DateRangeField(null=True)
}}}
{{{
MyModel.objects.update(period=(F('date_from'), F('date_to')))
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/models/manager.py", line 127, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-packages/django/db/models/query.py",
line 563, in update
rows = query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/models/sql/compiler.py", line 1062, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/models/sql/compiler.py", line 840, in execute_sql
cursor.execute(sql, params)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/backends/utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-packages/django/db/utils.py", line
97, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-packages/django/utils/six.py", line
658, in reraise
raise value.with_traceback(tb)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-
packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/tech/.pyenv/versions/partner-
backend-2015-08-11/lib/python3.4/site-packages/psycopg2/_range.py", line
235, in getquoted
a = adapt(r.lower)
django.db.utils.ProgrammingError: can't adapt type 'F'
}}}
Currently (F('date_from'), F('date_to')) is turned into psycopg2's
DateRange(F(date_from), F(date_to), '[)'), which obviously will not work
as it cannot handle F() expressions
I imagine Django needs its own DateRange that can handle them?
--
Ticket URL: <https://code.djangoproject.com/ticket/25591>
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/050.08fac030103aafcf2adabf7bd0615977%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.