1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
|
from django import forms
from .widgets import (TextInput, HiddenInput, CheckboxInput, Select,
ClearableFileInput, SelectMultiple, DateInput,
DateTimeInput, TimeInput, URLInput, NumberInput,
EmailInput, NullBooleanSelect, SlugInput, IPAddressInput,
SplitDateTimeWidget, SplitHiddenDateTimeWidget)
__all__ = (
'Field', 'CharField', 'IntegerField', 'DateField', 'TimeField',
'DateTimeField', 'EmailField', 'FileField', 'ImageField', 'URLField',
'BooleanField', 'NullBooleanField', 'ChoiceField', 'MultipleChoiceField',
'FloatField', 'DecimalField', 'SlugField', 'RegexField', 'IPAddressField',
'GenericIPAddressField', 'TypedChoiceField', 'FilePathField',
'TypedMultipleChoiceField', 'ComboField', 'MultiValueField',
'SplitDateTimeField',
)
class Field(forms.Field):
widget = TextInput
hidden_widget = HiddenInput
class CharField(Field, forms.CharField):
widget = TextInput
def widget_attrs(self, widget):
attrs = super(CharField, self).widget_attrs(widget)
if attrs is None:
attrs = {}
if self.max_length is not None and isinstance(widget, (TextInput, HiddenInput)):
# The HTML attribute is maxlength, not max_length.
attrs.update({'maxlength': str(self.max_length)})
return attrs
class BooleanField(Field, forms.BooleanField):
widget = CheckboxInput
class NullBooleanField(Field, forms.NullBooleanField):
widget = NullBooleanSelect
class ChoiceField(Field, forms.ChoiceField):
widget = Select
class TypedChoiceField(ChoiceField, forms.TypedChoiceField):
widget = Select
class FilePathField(ChoiceField, forms.FilePathField):
widget = Select
class FileField(Field, forms.FileField):
widget = ClearableFileInput
class ImageField(Field, forms.ImageField):
widget = ClearableFileInput
class MultipleChoiceField(Field, forms.MultipleChoiceField):
widget = SelectMultiple
class TypedMultipleChoiceField(MultipleChoiceField,
forms.TypedMultipleChoiceField):
pass
class DateField(Field, forms.DateField):
widget = DateInput
class DateTimeField(Field, forms.DateTimeField):
widget = DateTimeInput
class TimeField(Field, forms.TimeField):
widget = TimeInput
class FloatField(Field, forms.FloatField):
widget = NumberInput
class IntegerField(Field, forms.IntegerField):
widget = NumberInput
def __init__(self, *args, **kwargs):
kwargs.setdefault('widget', NumberInput if not kwargs.get('localize') else self.widget)
super(IntegerField, self).__init__(*args, **kwargs)
def widget_attrs(self, widget):
attrs = super(IntegerField, self).widget_attrs(widget) or {}
if self.min_value is not None:
attrs['min'] = self.min_value
if self.max_value is not None:
attrs['max'] = self.max_value
return attrs
class DecimalField(Field, forms.DecimalField):
widget = NumberInput
def __init__(self, *args, **kwargs):
kwargs.setdefault('widget', NumberInput if not kwargs.get('localize') else self.widget)
super(DecimalField, self).__init__(*args, **kwargs)
class EmailField(Field, forms.EmailField):
widget = EmailInput
class URLField(Field, forms.URLField):
widget = URLInput
class SlugField(Field, forms.SlugField):
widget = SlugInput
class RegexField(Field, forms.RegexField):
widget = TextInput
def __init__(self, regex, js_regex=None, max_length=None, min_length=None,
error_message=None, *args, **kwargs):
self.js_regex = js_regex
super(RegexField, self).__init__(regex, max_length, min_length,
*args, **kwargs)
def widget_attrs(self, widget):
attrs = super(RegexField, self).widget_attrs(widget) or {}
if self.js_regex is not None:
attrs['pattern'] = self.js_regex
return attrs
class IPAddressField(Field, forms.IPAddressField):
widget = IPAddressInput
class GenericIPAddressField(Field, forms.GenericIPAddressField):
pass
class ComboField(Field, forms.ComboField):
pass
class MultiValueField(Field, forms.MultiValueField):
pass
class SplitDateTimeField(forms.SplitDateTimeField):
widget = SplitDateTimeWidget
hidden_widget = SplitHiddenDateTimeWidget
def __init__(self, *args, **kwargs):
super(SplitDateTimeField, self).__init__(*args, **kwargs)
for widget in self.widget.widgets:
widget.is_required = self.required
|