1
0
mirror of https://github.com/django/django.git synced 2025-05-05 06:27:31 +00:00

Refs #32966 -- Simplified the _check_fix_default_value() implementations.

This commit is contained in:
Chris Jerdonek 2021-07-28 03:11:13 -04:00 committed by Mariusz Felisiak
parent eebebfe0a9
commit 6fa5d05dba

View File

@ -1171,20 +1171,20 @@ class DateField(DateTimeCheckMixin, Field):
if not self.has_default(): if not self.has_default():
return [] return []
now = _get_naive_now()
value = self.default value = self.default
if isinstance(value, datetime.datetime): if isinstance(value, datetime.datetime):
value = _to_naive(value) value = _to_naive(value).date()
value = value.date()
elif isinstance(value, datetime.date): elif isinstance(value, datetime.date):
# Nothing to do, as dates don't have tz information # Nothing to do, as dates don't have tz information
pass pass
else: else:
# No explicit date / datetime value -- no checks necessary # No explicit date / datetime value -- no checks necessary
return [] return []
# At this point, value is a date object.
today = _get_naive_now().date()
offset = datetime.timedelta(days=1) offset = datetime.timedelta(days=1)
lower = (now - offset).date() lower = today - offset
upper = (now + offset).date() upper = today + offset
if lower <= value <= upper: if lower <= value <= upper:
return [ return [
checks.Warning( checks.Warning(
@ -1308,20 +1308,20 @@ class DateTimeField(DateField):
if not self.has_default(): if not self.has_default():
return [] return []
now = _get_naive_now()
value = self.default value = self.default
if isinstance(value, datetime.datetime): if isinstance(value, datetime.datetime):
second_offset = datetime.timedelta(seconds=10)
lower = now - second_offset
upper = now + second_offset
value = _to_naive(value) value = _to_naive(value)
now = _get_naive_now()
offset = datetime.timedelta(seconds=10)
lower = now - offset
upper = now + offset
elif isinstance(value, datetime.date): elif isinstance(value, datetime.date):
second_offset = datetime.timedelta(seconds=10) now = _get_naive_now()
lower = now - second_offset offset = datetime.timedelta(seconds=10)
lower = datetime.datetime(lower.year, lower.month, lower.day) lower = now - offset
upper = now + second_offset upper = now + offset
upper = datetime.datetime(upper.year, upper.month, upper.day) lower = lower.date()
value = datetime.datetime(value.year, value.month, value.day) upper = upper.date()
else: else:
# No explicit date / datetime value -- no checks necessary # No explicit date / datetime value -- no checks necessary
return [] return []
@ -2201,22 +2201,22 @@ class TimeField(DateTimeCheckMixin, Field):
if not self.has_default(): if not self.has_default():
return [] return []
now = _get_naive_now()
value = self.default value = self.default
if isinstance(value, datetime.datetime): if isinstance(value, datetime.datetime):
second_offset = datetime.timedelta(seconds=10) now = _get_naive_now()
lower = now - second_offset
upper = now + second_offset
value = _to_naive(value)
elif isinstance(value, datetime.time): elif isinstance(value, datetime.time):
second_offset = datetime.timedelta(seconds=10) now = _get_naive_now()
lower = now - second_offset # This will not use the right date in the race condition where now
upper = now + second_offset # is just before the date change and value is just past 0:00.
value = datetime.datetime.combine(now.date(), value) value = datetime.datetime.combine(now.date(), value)
value = _to_naive(value)
else: else:
# No explicit time / datetime value -- no checks necessary # No explicit time / datetime value -- no checks necessary
return [] return []
# At this point, value is a datetime object.
offset = datetime.timedelta(seconds=10)
lower = now - offset
upper = now + offset
value = _to_naive(value)
if lower <= value <= upper: if lower <= value <= upper:
return [ return [
checks.Warning( checks.Warning(