#28827: AttributeError: 'int' object has no attribute 'tzinfo' with ExtractHour
and
calculation
-------------------------------------+-------------------------------------
Reporter: Martijnth | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: 1.11
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Description changed by Martijnth:
Old description:
> The generated query works fine in MySQL, guess Django still thinks the
> result is a datetime/timezone object
> but it has become an integer because of the calculation.
>
> {{{
> ---------------------------------------------------------------------------
> AttributeError Traceback (most recent call
> last)
> <ipython-input-1-b1fc61315659> in <module>()
> ---> 47 print(a)
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/query.py in __repr__(self)
> 224
> 225 def __repr__(self):
> --> 226 data = list(self[:REPR_OUTPUT_SIZE + 1])
> 227 if len(data) > REPR_OUTPUT_SIZE:
> 228 data[-1] = "...(remaining elements truncated)..."
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/query.py in __iter__(self)
> 248 - Responsible for turning the rows into model
> objects.
> 249 """
> --> 250 self._fetch_all()
> 251 return iter(self._result_cache)
> 252
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/query.py in _fetch_all(self)
> 1116 def _fetch_all(self):
> 1117 if self._result_cache is None:
> -> 1118 self._result_cache = list(self._iterable_class(self))
> 1119 if self._prefetch_related_lookups and not
> self._prefetch_done:
> 1120 self._prefetch_related_objects()
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/query.py in __iter__(self)
> 104 names = extra_names + field_names + annotation_names
> 105
> --> 106 for row in compiler.results_iter():
> 107 yield dict(zip(names, row))
> 108
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/sql/compiler.py in results_iter(self,
> results)
> 840 for row in rows:
> 841 if converters:
> --> 842 row = self.apply_converters(row, converters)
> 843 yield row
> 844
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/models/sql/compiler.py in apply_converters(self,
> row, converters)
> 825 value = row[pos]
> 826 for converter in convs:
> --> 827 value = converter(value, expression,
> self.connection, self.query.context)
> 828 row[pos] = value
> 829 return tuple(row)
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/db/backends/mysql/operations.py in
> convert_datetimefield_value(self, value, expression, connection, context)
> 237 if value is not None:
> 238 if settings.USE_TZ:
> --> 239 value = timezone.make_aware(value,
> self.connection.timezone)
> 240 return value
> 241
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/django/utils/timezone.py in make_aware(value, timezone,
> is_dst)
> 283 if hasattr(timezone, 'localize'):
> 284 # This method is available for pytz time zones.
> --> 285 return timezone.localize(value, is_dst=is_dst)
> 286 else:
> 287 # Check that we won't overwrite the timezone of an aware
> datetime.
>
> /Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
> /site-packages/pytz/__init__.py in localize(self, dt, is_dst)
> 225 '''Convert naive time to local time'''
> 226 print(dt)
> --> 227 if dt.tzinfo is not None:
> 228 raise ValueError('Not naive datetime (tzinfo is
> already set)')
> 229 return dt.replace(tzinfo=self)
>
> AttributeError: 'int' object has no attribute 'tzinfo'
>
> }}}
New description:
Query with ExtractHour and calculation like
"values(minutes=(ExtractHour('dt_start') * 60))" gives an pytz error:
AttributeError: 'int' object has no attribute 'tzinfo'
The generated query works fine in MySQL, guess Django still thinks the
result is a datetime/timezone object
but it has become an integer because of the calculation.
{{{
---------------------------------------------------------------------------
AttributeError Traceback (most recent call
last)
<ipython-input-1-b1fc61315659> in <module>()
---> 47 print(a)
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/query.py in __repr__(self)
224
225 def __repr__(self):
--> 226 data = list(self[:REPR_OUTPUT_SIZE + 1])
227 if len(data) > REPR_OUTPUT_SIZE:
228 data[-1] = "...(remaining elements truncated)..."
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/query.py in __iter__(self)
248 - Responsible for turning the rows into model
objects.
249 """
--> 250 self._fetch_all()
251 return iter(self._result_cache)
252
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/query.py in _fetch_all(self)
1116 def _fetch_all(self):
1117 if self._result_cache is None:
-> 1118 self._result_cache = list(self._iterable_class(self))
1119 if self._prefetch_related_lookups and not
self._prefetch_done:
1120 self._prefetch_related_objects()
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/query.py in __iter__(self)
104 names = extra_names + field_names + annotation_names
105
--> 106 for row in compiler.results_iter():
107 yield dict(zip(names, row))
108
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/sql/compiler.py in results_iter(self,
results)
840 for row in rows:
841 if converters:
--> 842 row = self.apply_converters(row, converters)
843 yield row
844
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/models/sql/compiler.py in apply_converters(self,
row, converters)
825 value = row[pos]
826 for converter in convs:
--> 827 value = converter(value, expression,
self.connection, self.query.context)
828 row[pos] = value
829 return tuple(row)
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/db/backends/mysql/operations.py in
convert_datetimefield_value(self, value, expression, connection, context)
237 if value is not None:
238 if settings.USE_TZ:
--> 239 value = timezone.make_aware(value,
self.connection.timezone)
240 return value
241
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/django/utils/timezone.py in make_aware(value, timezone,
is_dst)
283 if hasattr(timezone, 'localize'):
284 # This method is available for pytz time zones.
--> 285 return timezone.localize(value, is_dst=is_dst)
286 else:
287 # Check that we won't overwrite the timezone of an aware
datetime.
/Users/martijntenhoor/projects/bluebi/rms-drf-api/virtual/lib/python3.5
/site-packages/pytz/__init__.py in localize(self, dt, is_dst)
225 '''Convert naive time to local time'''
226 print(dt)
--> 227 if dt.tzinfo is not None:
228 raise ValueError('Not naive datetime (tzinfo is
already set)')
229 return dt.replace(tzinfo=self)
AttributeError: 'int' object has no attribute 'tzinfo'
}}}
--
--
Ticket URL: <https://code.djangoproject.com/ticket/28827#comment:2>
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/067.7906cad6916f66a9ed8141c24dc66f8b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.