Ticket #5481: choicefield_correct_type.diff
File choicefield_correct_type.diff, 5.2 KB (added by , 17 years ago) |
---|
-
django/newforms/fields.py
492 492 value = smart_unicode(value) 493 493 if value == u'': 494 494 return value 495 valid_values = set([smart_unicode(k) for k, v in self.choices])495 valid_values = dict([(smart_unicode(k),k) for k, v in self.choices]) 496 496 if value not in valid_values: 497 497 raise ValidationError(ugettext(u'Select a valid choice. That choice is not one of the available choices.')) 498 return val ue498 return valid_values[value] 499 499 500 500 class MultipleChoiceField(ChoiceField): 501 501 hidden_widget = MultipleHiddenInput … … 511 511 return [] 512 512 if not isinstance(value, (list, tuple)): 513 513 raise ValidationError(ugettext(u'Enter a list of values.')) 514 new_value = [smart_unicode(val) for val in value]515 514 # Validate that each value in the value list is in self.choices. 516 valid_values = set([smart_unicode(k) for k, v in self.choices]) 517 for val in new_value: 515 valid_values = dict([(smart_unicode(k),k) for k, v in self.choices]) 516 new_value = [] 517 for val in [smart_unicode(val) for val in value]: 518 518 if val not in valid_values: 519 519 raise ValidationError(ugettext(u'Select a valid choice. %s is not one of the available choices.') % val) 520 else: 521 new_value.append(valid_values[val]) 520 522 return new_value 521 523 522 524 class ComboField(Field): -
tests/regressiontests/forms/tests.py
1765 1765 ... 1766 1766 ValidationError: [u'This field is required.'] 1767 1767 >>> f.clean(1) 1768 u'1'1768 '1' 1769 1769 >>> f.clean('1') 1770 u'1'1770 '1' 1771 1771 >>> f.clean('3') 1772 1772 Traceback (most recent call last): 1773 1773 ... … … 1779 1779 >>> f.clean(None) 1780 1780 u'' 1781 1781 >>> f.clean(1) 1782 u'1'1782 '1' 1783 1783 >>> f.clean('1') 1784 u'1'1784 '1' 1785 1785 >>> f.clean('3') 1786 1786 Traceback (most recent call last): 1787 1787 ... … … 1789 1789 1790 1790 >>> f = ChoiceField(choices=[('J', 'John'), ('P', 'Paul')]) 1791 1791 >>> f.clean('J') 1792 u'J'1792 'J' 1793 1793 >>> f.clean('John') 1794 1794 Traceback (most recent call last): 1795 1795 ... 1796 1796 ValidationError: [u'Select a valid choice. That choice is not one of the available choices.'] 1797 1797 1798 >>> f = ChoiceField(choices=[(1, 'John'), (2, 'Paul')]) 1799 >>> f.clean('1') 1800 1 1801 >>> f.clean(1) 1802 1 1803 1804 >>> f = ChoiceField(choices=[(u'1', 'John'), (2, 'Paul')]) 1805 >>> f.clean('1') 1806 u'1' 1807 >>> f.clean(1) 1808 u'1' 1809 1798 1810 # NullBooleanField ############################################################ 1799 1811 1800 1812 >>> f = NullBooleanField() … … 1821 1833 ... 1822 1834 ValidationError: [u'This field is required.'] 1823 1835 >>> f.clean([1]) 1824 [ u'1']1836 ['1'] 1825 1837 >>> f.clean(['1']) 1826 [ u'1']1838 ['1'] 1827 1839 >>> f.clean(['1', '2']) 1828 [ u'1', u'2']1840 ['1', '2'] 1829 1841 >>> f.clean([1, '2']) 1830 [ u'1', u'2']1842 ['1', '2'] 1831 1843 >>> f.clean((1, '2')) 1832 [ u'1', u'2']1844 ['1', '2'] 1833 1845 >>> f.clean('hello') 1834 1846 Traceback (most recent call last): 1835 1847 ... … … 1853 1865 >>> f.clean(None) 1854 1866 [] 1855 1867 >>> f.clean([1]) 1856 [ u'1']1868 ['1'] 1857 1869 >>> f.clean(['1']) 1858 [ u'1']1870 ['1'] 1859 1871 >>> f.clean(['1', '2']) 1860 [ u'1', u'2']1872 ['1', '2'] 1861 1873 >>> f.clean([1, '2']) 1862 [ u'1', u'2']1874 ['1', '2'] 1863 1875 >>> f.clean((1, '2')) 1864 [ u'1', u'2']1876 ['1', '2'] 1865 1877 >>> f.clean('hello') 1866 1878 Traceback (most recent call last): 1867 1879 ... … … 1875 1887 ... 1876 1888 ValidationError: [u'Select a valid choice. 3 is not one of the available choices.'] 1877 1889 1890 >>> f = MultipleChoiceField(choices=[(1, '1'), (2, '2')]) 1891 >>> f.clean(['1']) 1892 [1] 1893 >>> f.clean(['1', '2']) 1894 [1, 2] 1895 >>> f.clean([1, '2']) 1896 [1, 2] 1897 1898 >>> f = MultipleChoiceField(choices=[(u'1', '1'), (u'2', '2')]) 1899 >>> f.clean(['1']) 1900 [u'1'] 1901 >>> f.clean(['1', '2']) 1902 [u'1', u'2'] 1903 >>> f.clean([1, '2']) 1904 [u'1', u'2'] 1905 1878 1906 # ComboField ################################################################## 1879 1907 1880 1908 ComboField takes a list of fields that should be used to validate a value, … … 2529 2557 >>> f.errors 2530 2558 {} 2531 2559 >>> f.cleaned_data 2532 {'composers': [ u'J'], 'name': u'Yesterday'}2560 {'composers': ['J'], 'name': u'Yesterday'} 2533 2561 >>> f = SongForm({'name': 'Yesterday', 'composers': ['J', 'P']}, auto_id=False) 2534 2562 >>> f.errors 2535 2563 {} 2536 2564 >>> f.cleaned_data 2537 {'composers': [ u'J', u'P'], 'name': u'Yesterday'}2565 {'composers': ['J', 'P'], 'name': u'Yesterday'} 2538 2566 2539 2567 Validation errors are HTML-escaped when output as HTML. 2540 2568 >>> class EscapingForm(Form): -
tests/regressiontests/forms/regressions.py
49 49 >>> UNITS = (('\xd0\xbc\xd0\xb5\xd1\x81.', '\xd0\xbc\xd0\xb5\xd1\x81.'), ('\xd1\x88\xd1\x82.', '\xd1\x88\xd1\x82.')) 50 50 >>> f = ChoiceField(choices=UNITS) 51 51 >>> f.clean(u'\u0448\u0442.') 52 '\xd1\x88\xd1\x82.' 53 >>> f.clean('\xd1\x88\xd1\x82.') 54 '\xd1\x88\xd1\x82.' 55 56 >>> UNITS = ((u'\u043c\u0435\u0441.', u'\u043c\u0435\u0441.'), (u'\u0448\u0442.', u'\u0448\u0442.')) 57 >>> f = ChoiceField(choices=UNITS) 58 >>> f.clean(u'\u0448\u0442.') 52 59 u'\u0448\u0442.' 53 60 >>> f.clean('\xd1\x88\xd1\x82.') 54 61 u'\u0448\u0442.'