Fixed #17294 -- Supported nullable DateTimeFields when time zone support is enabled. Thanks pressureman for the report.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17148 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Aymeric Augustin 2011-11-25 09:25:43 +00:00
parent e954a03871
commit 866c229f52
4 changed files with 13 additions and 2 deletions

View File

@ -786,7 +786,7 @@ class DateTimeField(DateField):
def get_prep_value(self, value): def get_prep_value(self, value):
value = self.to_python(value) value = self.to_python(value)
if settings.USE_TZ and timezone.is_naive(value): if value is not None and settings.USE_TZ and timezone.is_naive(value):
# For backwards compatibility, interpret naive datetimes in local # For backwards compatibility, interpret naive datetimes in local
# time. This won't work during DST change, but we can't do much # time. This won't work during DST change, but we can't do much
# about it, so we let the exceptions percolate up the call stack. # about it, so we let the exceptions percolate up the call stack.

View File

@ -228,6 +228,9 @@ def now():
else: else:
return datetime.now() return datetime.now()
# By design, these four functions don't perform any checks on their arguments.
# The caller should ensure that they don't receive an invalid value like None.
def is_aware(value): def is_aware(value):
""" """
Determines if a given datetime.datetime is aware. Determines if a given datetime.datetime is aware.

View File

@ -3,6 +3,9 @@ from django.db import models
class Event(models.Model): class Event(models.Model):
dt = models.DateTimeField() dt = models.DateTimeField()
class MaybeEvent(models.Model):
dt = models.DateTimeField(blank=True, null=True)
class Timestamp(models.Model): class Timestamp(models.Model):
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True) updated = models.DateTimeField(auto_now=True)

View File

@ -25,7 +25,7 @@ from django.utils.tzinfo import FixedOffset
from django.utils.unittest import skipIf from django.utils.unittest import skipIf
from .forms import EventForm, EventSplitForm, EventModelForm from .forms import EventForm, EventSplitForm, EventModelForm
from .models import Event, Timestamp from .models import Event, MaybeEvent, Timestamp
# These tests use the EAT (Eastern Africa Time) and ICT (Indochina Time) # These tests use the EAT (Eastern Africa Time) and ICT (Indochina Time)
@ -403,6 +403,11 @@ class NewDatabaseTests(BaseDateTimeTests):
datetime.datetime(2011, 1, 1, tzinfo=UTC)], datetime.datetime(2011, 1, 1, tzinfo=UTC)],
transform=lambda d: d) transform=lambda d: d)
def test_null_datetime(self):
# Regression for #17294
e = MaybeEvent.objects.create()
self.assertEqual(e.dt, None)
NewDatabaseTests = override_settings(USE_TZ=True)(NewDatabaseTests) NewDatabaseTests = override_settings(USE_TZ=True)(NewDatabaseTests)