Loading django/forms/extras/widgets.py +2 −3 Original line number Diff line number Diff line Loading @@ -53,9 +53,8 @@ class SelectDateWidget(Widget): day_field = '%s_day' year_field = '%s_year' def __init__(self, attrs=None, years=None, required=True, months=None): def __init__(self, attrs=None, years=None, months=None): self.attrs = attrs or {} self.required = required # Optional list or tuple of years to use in the "year" select box. if years: Loading Loading @@ -139,7 +138,7 @@ class SelectDateWidget(Widget): id_ = self.attrs['id'] else: id_ = 'id_%s' % name if not (self.required and val): if not self.is_required: choices.insert(0, self.none_value) local_attrs = self.build_attrs(id=field % id_) s = Select(choices=choices) Loading docs/releases/1.7.txt +5 −0 Original line number Diff line number Diff line Loading @@ -613,6 +613,11 @@ Miscellaneous you relied on the default field ordering while having fields defined on both the current class *and* on a parent ``Form``. * The ``required`` argument of :class:`~django.forms.extras.widgets.SelectDateWidget` has been removed. This widget now respects the form field's ``is_required`` attribute like other widgets. * :meth:`~django.db.models.query.QuerySet.select_related` now chains in the same way as other similar calls like ``prefetch_related``. That is, ``select_related('foo', 'bar')`` is equivalent to Loading tests/forms_tests/tests/test_extra.py +17 −139 Original line number Diff line number Diff line Loading @@ -26,10 +26,6 @@ class GetDate(Form): mydate = DateField(widget=SelectDateWidget) class GetNotRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=False) class GetDateShowHiddenInitial(Form): mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True) Loading @@ -41,6 +37,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # The forms library comes with some extra, higher-level Field and Widget def test_selectdate(self): self.maxDiff = None w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) # Rendering the default state. Loading Loading @@ -114,6 +111,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # Rendering a string value. self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> Loading @@ -128,6 +126,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> Loading Loading @@ -161,6 +160,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> Loading @@ -178,6 +178,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # Invalid dates should still render the failed date. self.assertHTMLEqual(w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> Loading @@ -192,6 +193,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> Loading Loading @@ -225,6 +227,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> Loading Loading @@ -293,133 +296,6 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2013">2013</option> </select>""") # Using a SelectDateWidget in a form. w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) Loading Loading @@ -768,13 +644,15 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): self.assertTrue(FormWithFile().is_multipart()) self.assertTrue(FormWithImage().is_multipart()) def test_field_not_required(self): b = GetNotRequiredDate({ 'mydate_year': '', 'mydate_month': '', 'mydate_day': '' }) self.assertFalse(b.has_changed()) def test_selectdatewidget_required(self): class GetNotRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=False) class GetRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=True) self.assertFalse(GetNotRequiredDate().fields['mydate'].widget.is_required) self.assertTrue(GetRequiredDate().fields['mydate'].widget.is_required) @override_settings(USE_L10N=True) Loading @@ -788,7 +666,7 @@ class FormsExtraL10NTestCase(TestCase): super(FormsExtraL10NTestCase, self).tearDown() def test_l10n(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) self.assertEqual(w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-2010') self.assertHTMLEqual(w.render('date', '13-08-2010'), """<select name="date_day" id="id_date_day"> Loading tests/i18n/tests.py +6 −4 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
django/forms/extras/widgets.py +2 −3 Original line number Diff line number Diff line Loading @@ -53,9 +53,8 @@ class SelectDateWidget(Widget): day_field = '%s_day' year_field = '%s_year' def __init__(self, attrs=None, years=None, required=True, months=None): def __init__(self, attrs=None, years=None, months=None): self.attrs = attrs or {} self.required = required # Optional list or tuple of years to use in the "year" select box. if years: Loading Loading @@ -139,7 +138,7 @@ class SelectDateWidget(Widget): id_ = self.attrs['id'] else: id_ = 'id_%s' % name if not (self.required and val): if not self.is_required: choices.insert(0, self.none_value) local_attrs = self.build_attrs(id=field % id_) s = Select(choices=choices) Loading
docs/releases/1.7.txt +5 −0 Original line number Diff line number Diff line Loading @@ -613,6 +613,11 @@ Miscellaneous you relied on the default field ordering while having fields defined on both the current class *and* on a parent ``Form``. * The ``required`` argument of :class:`~django.forms.extras.widgets.SelectDateWidget` has been removed. This widget now respects the form field's ``is_required`` attribute like other widgets. * :meth:`~django.db.models.query.QuerySet.select_related` now chains in the same way as other similar calls like ``prefetch_related``. That is, ``select_related('foo', 'bar')`` is equivalent to Loading
tests/forms_tests/tests/test_extra.py +17 −139 Original line number Diff line number Diff line Loading @@ -26,10 +26,6 @@ class GetDate(Form): mydate = DateField(widget=SelectDateWidget) class GetNotRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=False) class GetDateShowHiddenInitial(Form): mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True) Loading @@ -41,6 +37,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # The forms library comes with some extra, higher-level Field and Widget def test_selectdate(self): self.maxDiff = None w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) # Rendering the default state. Loading Loading @@ -114,6 +111,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # Rendering a string value. self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> Loading @@ -128,6 +126,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> Loading Loading @@ -161,6 +160,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> Loading @@ -178,6 +178,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): # Invalid dates should still render the failed date. self.assertHTMLEqual(w.render('mydate', '2010-02-31'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2" selected="selected">February</option> <option value="3">March</option> Loading @@ -192,6 +193,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> Loading Loading @@ -225,6 +227,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <option value="31" selected="selected">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> Loading Loading @@ -293,133 +296,6 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2013">2013</option> </select>""") # Using a SelectDateWidget in a form. w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) self.assertHTMLEqual(w.render('mydate', ''), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") self.assertHTMLEqual(w.render('mydate', '2010-04-15'), """<select name="mydate_month" id="id_mydate_month"> <option value="0">---</option> <option value="1">January</option> <option value="2">February</option> <option value="3">March</option> <option value="4" selected="selected">April</option> <option value="5">May</option> <option value="6">June</option> <option value="7">July</option> <option value="8">August</option> <option value="9">September</option> <option value="10">October</option> <option value="11">November</option> <option value="12">December</option> </select> <select name="mydate_day" id="id_mydate_day"> <option value="0">---</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> <option value="11">11</option> <option value="12">12</option> <option value="13">13</option> <option value="14">14</option> <option value="15" selected="selected">15</option> <option value="16">16</option> <option value="17">17</option> <option value="18">18</option> <option value="19">19</option> <option value="20">20</option> <option value="21">21</option> <option value="22">22</option> <option value="23">23</option> <option value="24">24</option> <option value="25">25</option> <option value="26">26</option> <option value="27">27</option> <option value="28">28</option> <option value="29">29</option> <option value="30">30</option> <option value="31">31</option> </select> <select name="mydate_year" id="id_mydate_year"> <option value="0">---</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010" selected="selected">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> <option value="2013">2013</option> <option value="2014">2014</option> <option value="2015">2015</option> <option value="2016">2016</option> </select>""") a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) Loading Loading @@ -768,13 +644,15 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): self.assertTrue(FormWithFile().is_multipart()) self.assertTrue(FormWithImage().is_multipart()) def test_field_not_required(self): b = GetNotRequiredDate({ 'mydate_year': '', 'mydate_month': '', 'mydate_day': '' }) self.assertFalse(b.has_changed()) def test_selectdatewidget_required(self): class GetNotRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=False) class GetRequiredDate(Form): mydate = DateField(widget=SelectDateWidget, required=True) self.assertFalse(GetNotRequiredDate().fields['mydate'].widget.is_required) self.assertTrue(GetRequiredDate().fields['mydate'].widget.is_required) @override_settings(USE_L10N=True) Loading @@ -788,7 +666,7 @@ class FormsExtraL10NTestCase(TestCase): super(FormsExtraL10NTestCase, self).tearDown() def test_l10n(self): w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016'), required=False) w = SelectDateWidget(years=('2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016')) self.assertEqual(w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-2010') self.assertHTMLEqual(w.render('date', '13-08-2010'), """<select name="date_day" id="id_date_day"> Loading