mirror of
https://github.com/django/django.git
synced 2025-07-05 10:19:20 +00:00
newforms-admin: Merged to [4411]
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@4412 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
50fd13ca73
commit
2301f9a89b
@ -4,7 +4,7 @@ Field classes
|
|||||||
|
|
||||||
from django.utils.translation import gettext
|
from django.utils.translation import gettext
|
||||||
from util import ErrorList, ValidationError, smart_unicode
|
from util import ErrorList, ValidationError, smart_unicode
|
||||||
from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, SelectMultiple
|
from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple
|
||||||
import datetime
|
import datetime
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
@ -15,7 +15,7 @@ __all__ = (
|
|||||||
'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
|
'DEFAULT_TIME_INPUT_FORMATS', 'TimeField',
|
||||||
'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField',
|
'DEFAULT_DATETIME_INPUT_FORMATS', 'DateTimeField',
|
||||||
'RegexField', 'EmailField', 'URLField', 'BooleanField',
|
'RegexField', 'EmailField', 'URLField', 'BooleanField',
|
||||||
'ChoiceField', 'MultipleChoiceField',
|
'ChoiceField', 'NullBooleanField', 'MultipleChoiceField',
|
||||||
'ComboField', 'MultiValueField',
|
'ComboField', 'MultiValueField',
|
||||||
'SplitDateTimeField',
|
'SplitDateTimeField',
|
||||||
)
|
)
|
||||||
@ -317,6 +317,16 @@ class BooleanField(Field):
|
|||||||
super(BooleanField, self).clean(value)
|
super(BooleanField, self).clean(value)
|
||||||
return bool(value)
|
return bool(value)
|
||||||
|
|
||||||
|
class NullBooleanField(BooleanField):
|
||||||
|
"""
|
||||||
|
A field whose valid values are None, True and False. Invalid values are
|
||||||
|
cleaned to None.
|
||||||
|
"""
|
||||||
|
widget = NullBooleanSelect
|
||||||
|
|
||||||
|
def clean(self, value):
|
||||||
|
return {True: True, False: False}.get(value, None)
|
||||||
|
|
||||||
class ChoiceField(Field):
|
class ChoiceField(Field):
|
||||||
def __init__(self, choices=(), required=True, widget=Select, label=None, initial=None):
|
def __init__(self, choices=(), required=True, widget=Select, label=None, initial=None):
|
||||||
if isinstance(widget, type):
|
if isinstance(widget, type):
|
||||||
|
@ -5,13 +5,14 @@ HTML Widget classes
|
|||||||
__all__ = (
|
__all__ = (
|
||||||
'Widget', 'TextInput', 'PasswordInput', 'HiddenInput', 'MultipleHiddenInput',
|
'Widget', 'TextInput', 'PasswordInput', 'HiddenInput', 'MultipleHiddenInput',
|
||||||
'FileInput', 'Textarea', 'CheckboxInput',
|
'FileInput', 'Textarea', 'CheckboxInput',
|
||||||
'Select', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple',
|
'Select', 'NullBooleanSelect', 'SelectMultiple', 'RadioSelect', 'CheckboxSelectMultiple',
|
||||||
'MultiWidget', 'SplitDateTimeWidget',
|
'MultiWidget', 'SplitDateTimeWidget',
|
||||||
)
|
)
|
||||||
|
|
||||||
from util import flatatt, StrAndUnicode, smart_unicode
|
from util import flatatt, StrAndUnicode, smart_unicode
|
||||||
from django.utils.datastructures import MultiValueDict
|
from django.utils.datastructures import MultiValueDict
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
|
from django.utils.translation import gettext
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -151,6 +152,25 @@ class Select(Widget):
|
|||||||
output.append(u'</select>')
|
output.append(u'</select>')
|
||||||
return u'\n'.join(output)
|
return u'\n'.join(output)
|
||||||
|
|
||||||
|
class NullBooleanSelect(Select):
|
||||||
|
"""
|
||||||
|
A Select Widget intended to be used with NullBooleanField.
|
||||||
|
"""
|
||||||
|
def __init__(self, attrs=None):
|
||||||
|
choices = ((u'1', gettext('Unknown')), (u'2', gettext('Yes')), (u'3', gettext('No')))
|
||||||
|
super(NullBooleanSelect, self).__init__(attrs, choices)
|
||||||
|
|
||||||
|
def render(self, name, value, attrs=None, choices=()):
|
||||||
|
try:
|
||||||
|
value = {True: u'2', False: u'3', u'2': u'2', u'3': u'3'}[value]
|
||||||
|
except KeyError:
|
||||||
|
value = u'1'
|
||||||
|
return super(NullBooleanSelect, self).render(name, value, attrs, choices)
|
||||||
|
|
||||||
|
def value_from_datadict(self, data, name):
|
||||||
|
value = data.get(name, None)
|
||||||
|
return {u'2': True, u'3': False, True: True, False: False}.get(value, None)
|
||||||
|
|
||||||
class SelectMultiple(Widget):
|
class SelectMultiple(Widget):
|
||||||
def __init__(self, attrs=None, choices=()):
|
def __init__(self, attrs=None, choices=()):
|
||||||
# choices can be any iterable
|
# choices can be any iterable
|
||||||
|
Loading…
x
Reference in New Issue
Block a user