summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVilliers Strauss <villiers.strauss@logimeter.com>2015-05-22 15:54:31 +0200
committerTim Graham <timograham@gmail.com>2015-05-25 12:06:55 -0400
commit614bec41b5306b32b8de20d66f047ff8d6f35256 (patch)
treec3ce84b5d75dc9b9162d37c0298c4cd6fff9891d
parenta6b77abff75709ee09a0d31d450af601f1f806d9 (diff)
Fixed #24841 -- Made BaseRangeField.prepare_value() call base_field's prepare_value()
-rw-r--r--django/contrib/postgres/forms/ranges.py11
-rw-r--r--docs/releases/1.8.3.txt3
-rw-r--r--tests/postgres_tests/test_ranges.py10
3 files changed, 20 insertions, 4 deletions
diff --git a/django/contrib/postgres/forms/ranges.py b/django/contrib/postgres/forms/ranges.py
index cab2267685..75e5691d83 100644
--- a/django/contrib/postgres/forms/ranges.py
+++ b/django/contrib/postgres/forms/ranges.py
@@ -22,10 +22,17 @@ class BaseRangeField(forms.MultiValueField):
super(BaseRangeField, self).__init__(**kwargs)
def prepare_value(self, value):
+ lower_base, upper_base = self.fields
if isinstance(value, self.range_type):
- return [value.lower, value.upper]
+ return [
+ lower_base.prepare_value(value.lower),
+ upper_base.prepare_value(value.upper),
+ ]
if value is None:
- return [None, None]
+ return [
+ lower_base.prepare_value(None),
+ upper_base.prepare_value(None),
+ ]
return value
def compress(self, values):
diff --git a/docs/releases/1.8.3.txt b/docs/releases/1.8.3.txt
index ed293156c2..a8a649cdf0 100644
--- a/docs/releases/1.8.3.txt
+++ b/docs/releases/1.8.3.txt
@@ -9,4 +9,5 @@ Django 1.8.3 fixes several bugs in 1.8.2.
Bugfixes
========
-* ...
+* Fixed ``BaseRangeField.prepare_value()`` to use each ``base_field``’s
+ ``prepare_value()`` method (:ticket:`24841`).
diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py
index cab7263af2..5ec6dae27b 100644
--- a/tests/postgres_tests/test_ranges.py
+++ b/tests/postgres_tests/test_ranges.py
@@ -5,7 +5,7 @@ import unittest
from django import forms
from django.core import exceptions, serializers
from django.db import connection
-from django.test import TestCase
+from django.test import TestCase, override_settings
from django.utils import timezone
from . import PostgresSQLTestCase
@@ -474,6 +474,14 @@ class TestFormField(PostgresSQLTestCase):
value = field.clean(['2013-04-09 11:45', ''])
self.assertEqual(value, DateTimeTZRange(datetime.datetime(2013, 4, 9, 11, 45), None))
+ @override_settings(USE_TZ=True, TIME_ZONE='Africa/Johannesburg')
+ def test_datetime_prepare_value(self):
+ field = pg_forms.DateTimeRangeField()
+ value = field.prepare_value(
+ DateTimeTZRange(datetime.datetime(2015, 5, 22, 16, 6, 33, tzinfo=timezone.utc), None)
+ )
+ self.assertEqual(value, [datetime.datetime(2015, 5, 22, 18, 6, 33), None])
+
def test_model_field_formfield_integer(self):
model_field = pg_fields.IntegerRangeField()
form_field = model_field.formfield()