mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	Fixed #22684 -- Added empty_label option on django.forms.extras.widets.SelectDateWidget
				
					
				
			Thanks danielsamuels for the report
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							fd427f1fe3
						
					
				
				
					commit
					32586b0ba4
				
			
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -484,6 +484,7 @@ answer newbie questions, and generally made Django that much better: | |||||||
|     oggy <ognjen.maric@gmail.com> |     oggy <ognjen.maric@gmail.com> | ||||||
|     Tomek Paczkowski <tomek@hauru.eu> |     Tomek Paczkowski <tomek@hauru.eu> | ||||||
|     Jens Page |     Jens Page | ||||||
|  |     Guillaume Pannatier <guillaume.pannatier@gmail.com> | ||||||
|     Jay Parlar <parlar@gmail.com> |     Jay Parlar <parlar@gmail.com> | ||||||
|     Carlos Eduardo de Paula <carlosedp@gmail.com> |     Carlos Eduardo de Paula <carlosedp@gmail.com> | ||||||
|     John Paulett <john@paulett.org> |     John Paulett <john@paulett.org> | ||||||
|   | |||||||
| @@ -48,7 +48,7 @@ class SelectDateWidget(Widget): | |||||||
|     day_field = '%s_day' |     day_field = '%s_day' | ||||||
|     year_field = '%s_year' |     year_field = '%s_year' | ||||||
|  |  | ||||||
|     def __init__(self, attrs=None, years=None, months=None): |     def __init__(self, attrs=None, years=None, months=None, empty_label=None): | ||||||
|         self.attrs = attrs or {} |         self.attrs = attrs or {} | ||||||
|  |  | ||||||
|         # Optional list or tuple of years to use in the "year" select box. |         # Optional list or tuple of years to use in the "year" select box. | ||||||
| @@ -64,6 +64,9 @@ class SelectDateWidget(Widget): | |||||||
|         else: |         else: | ||||||
|             self.months = MONTHS |             self.months = MONTHS | ||||||
|  |  | ||||||
|  |         if empty_label is not None: | ||||||
|  |             self.none_value = (0, empty_label) | ||||||
|  |  | ||||||
|     def render(self, name, value, attrs=None): |     def render(self, name, value, attrs=None): | ||||||
|         try: |         try: | ||||||
|             year_val, month_val, day_val = value.year, value.month, value.day |             year_val, month_val, day_val = value.year, value.month, value.day | ||||||
|   | |||||||
| @@ -781,3 +781,15 @@ Composite widgets | |||||||
|                 5:_('may'), 6:_('jun'), 7:_('jul'), 8:_('aug'), |                 5:_('may'), 6:_('jun'), 7:_('jul'), 8:_('aug'), | ||||||
|                 9:_('sep'), 10:_('oct'), 11:_('nov'), 12:_('dec') |                 9:_('sep'), 10:_('oct'), 11:_('nov'), 12:_('dec') | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |     .. attribute:: SelectDateWidget.empty_label | ||||||
|  |  | ||||||
|  |         .. versionadded:: 1.8 | ||||||
|  |  | ||||||
|  |         If the :class:`~django.forms.DateField` is not required, | ||||||
|  |         :class:`SelectDateWidget` will have an empty choice at the top of | ||||||
|  |         the list. You can change the text of this label | ||||||
|  |         (which is ``---`` by default) with the ``empty_label`` attribute:: | ||||||
|  |  | ||||||
|  |             # A custom empty label | ||||||
|  |             field1 = forms.DateField(widget=SelectDateWidget(empty_label="Nothing")) | ||||||
|   | |||||||
| @@ -136,6 +136,10 @@ Forms | |||||||
|   a form's :attr:`~django.forms.Form.label_suffix` while using  shortcuts such |   a form's :attr:`~django.forms.Form.label_suffix` while using  shortcuts such | ||||||
|   as ``{{ form.as_p }}`` in templates. |   as ``{{ form.as_p }}`` in templates. | ||||||
|  |  | ||||||
|  | * :class:`~django.forms.extras.widgets.SelectDateWidget` now accepts an | ||||||
|  |   :attr:`~django.forms.extras.widgets.SelectDateWidget.empty_label` argument, which will | ||||||
|  |   override the top list choice label when :class:`~django.forms.DateField` is not required. | ||||||
|  |  | ||||||
| Internationalization | Internationalization | ||||||
| ^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^ | ||||||
|  |  | ||||||
|   | |||||||
| @@ -297,6 +297,11 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): | |||||||
| <option value="2013">2013</option> | <option value="2013">2013</option> | ||||||
| </select>""") | </select>""") | ||||||
|  |  | ||||||
|  |         w = SelectDateWidget(years=('2014',), empty_label='empty_label') | ||||||
|  |  | ||||||
|  |         # Rendering the default state with empty_label setted. | ||||||
|  |         self.assertInHTML('<option value="0">empty_label</option>', w.render('mydate', ''), count=3) | ||||||
|  |  | ||||||
|         a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) |         a = GetDate({'mydate_month': '4', 'mydate_day': '1', 'mydate_year': '2008'}) | ||||||
|         self.assertTrue(a.is_valid()) |         self.assertTrue(a.is_valid()) | ||||||
|         self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1)) |         self.assertEqual(a.cleaned_data['mydate'], datetime.date(2008, 4, 1)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user