#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 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/067.7906cad6916f66a9ed8141c24dc66f8b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to