diff --git a/sql_server/pyodbc/query.py b/sql_server/pyodbc/query.py index 326102de..cc676ad3 100644 --- a/sql_server/pyodbc/query.py +++ b/sql_server/pyodbc/query.py @@ -109,7 +109,7 @@ def convert_values(self, value, field): return value elif field and field.get_internal_type() == 'DateField': value = value.date() # extract date - elif field and field.get_internal_type() == 'TimeField': + elif field and field.get_internal_type() == 'TimeField' or (isinstance(value, datetime) and value.year == 1900 and value.month == value.day == 1): value = value.time() # extract time # Some cases (for example when select_related() is used) aren't # caught by the DateField case above and date fields arrive from diff --git a/tests/issue049/__init__.py b/tests/issue049/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/issue049/models.py b/tests/issue049/models.py new file mode 100644 index 00000000..fcc91c46 --- /dev/null +++ b/tests/issue049/models.py @@ -0,0 +1,26 @@ + +from django.db import models + +class Event(models.Model): + start = models.ForeignKey('TimeRepresentation') + +class TimeRepresentation(models.Model): + hora = models.TimeField(null=True) + +__test__ = {'API_TESTS': """ +>>> from datetime import time + +>>> t = TimeRepresentation.objects.create(hora=time(0, 0)) +>>> ev = Event.objects.create(start=t) + +# If we access without select_related, it works fine +>>> evs1 = Event.objects.all() +>>> evs1[0].start.hora +datetime.time(0, 0) + +# If we access with select_related, it works too +>>> evs2 = Event.objects.all().select_related('start') +>>> evs2[0].start.hora +datetime.time(0, 0) + +"""} diff --git a/tests/settings.py b/tests/settings.py index a0f496c5..52a70e5d 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -85,6 +85,7 @@ 'issue019', 'issue028', 'issue031', + 'issue049', 'basic', 'order_with_respect_to', 'fixtures',