Skip to content

Commit f9997a5

Browse files
committed
BUG18956789: Fix Django TimeField 00:00:00 converting to MySQL NULL
We fix saving Django's TimeField values so that 00:00:00 is correctly converted instead of saving as NULL. Python considered a time 00:00:00 as False, which gave problems when validating.
1 parent 8a88aac commit f9997a5

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

lib/mysql/connector/django/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ def validate_autopk_value(self, value):
385385
return value
386386

387387
def value_to_db_datetime(self, value):
388-
if not value:
388+
if value is None:
389389
return None
390390
# MySQL doesn't support tz-aware times
391391
if timezone.is_aware(value):
@@ -405,7 +405,7 @@ def value_to_db_datetime(self, value):
405405
return self.connection.connection.converter._datetime_to_mysql(value)
406406

407407
def value_to_db_time(self, value):
408-
if not value:
408+
if value is None:
409409
return None
410410

411411
# MySQL doesn't support tz-aware times

tests/test_django.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,34 @@ def test__init__(self):
207207
self.assertEqual(exp, self.cnx.ops.value_to_db_time(value))
208208

209209

210+
class DjangoDatabaseOperations(tests.MySQLConnectorTests):
211+
212+
"""Test the Django base.DatabaseOperations class"""
213+
214+
def setUp(self):
215+
dbconfig = tests.get_mysql_config()
216+
self.conn = mysql.connector.connect(**dbconfig)
217+
self.cnx = DatabaseWrapper(settings.DATABASES['default'])
218+
self.dbo = DatabaseOperations(self.cnx)
219+
220+
def test_value_to_db_time(self):
221+
self.assertEqual(None, self.dbo.value_to_db_time(None))
222+
223+
value = datetime.time(0, 0, 0)
224+
exp = self.conn.converter._time_to_mysql(value)
225+
self.assertEqual(exp, self.dbo.value_to_db_time(value))
226+
227+
value = datetime.time(2, 5, 7)
228+
exp = self.conn.converter._time_to_mysql(value)
229+
self.assertEqual(exp, self.dbo.value_to_db_time(value))
230+
231+
def value_to_db_datetime(self, value):
232+
self.assertEqual(None, self.dbo.value_to_db_datetime(None))
233+
234+
value = datetime.datetime(1, 1, 1)
235+
exp = self.conn.converter._datetime_to_mysql(value)
236+
self.assertEqual(exp, self.dbo.value_to_db_datetime(value))
237+
238+
value = datetime.time(2,5,7, 10, 10)
239+
exp = self.conn.converter._datetime_to_mysql(value)
240+
self.assertEqual(exp, self.dbo.value_to_db_datetime(value))

0 commit comments

Comments
 (0)