Fixed #8556: added a useful formfield to `CommaSeparatedIntegerField`. gkelly, mattmcc, and kratorius all contributed portions of this patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8682 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
fe8e00ae06
commit
a41ca9c9e2
|
@ -94,6 +94,11 @@ class BaseModelAdmin(object):
|
||||||
kwargs['widget'] = widgets.AdminIntegerFieldWidget
|
kwargs['widget'] = widgets.AdminIntegerFieldWidget
|
||||||
return db_field.formfield(**kwargs)
|
return db_field.formfield(**kwargs)
|
||||||
|
|
||||||
|
# For CommaSeparatedIntegerFields, add a custom CSS class.
|
||||||
|
if isinstance(db_field, models.CommaSeparatedIntegerField):
|
||||||
|
kwargs['widget'] = widgets.AdminCommaSeparatedIntegerFieldWidget
|
||||||
|
return db_field.formfield(**kwargs)
|
||||||
|
|
||||||
# For TextInputs, add a custom CSS class.
|
# For TextInputs, add a custom CSS class.
|
||||||
if isinstance(db_field, models.CharField):
|
if isinstance(db_field, models.CharField):
|
||||||
kwargs['widget'] = widgets.AdminTextInputWidget
|
kwargs['widget'] = widgets.AdminTextInputWidget
|
||||||
|
|
|
@ -236,3 +236,10 @@ class AdminIntegerFieldWidget(forms.TextInput):
|
||||||
if attrs is not None:
|
if attrs is not None:
|
||||||
final_attrs.update(attrs)
|
final_attrs.update(attrs)
|
||||||
super(AdminIntegerFieldWidget, self).__init__(attrs=final_attrs)
|
super(AdminIntegerFieldWidget, self).__init__(attrs=final_attrs)
|
||||||
|
|
||||||
|
class AdminCommaSeparatedIntegerFieldWidget(forms.TextInput):
|
||||||
|
def __init__(self, attrs=None):
|
||||||
|
final_attrs = {'class': 'vCommaSeparatedIntegerField'}
|
||||||
|
if attrs is not None:
|
||||||
|
final_attrs.update(attrs)
|
||||||
|
super(AdminCommaSeparatedIntegerFieldWidget, self).__init__(attrs=final_attrs)
|
||||||
|
|
|
@ -394,7 +394,17 @@ class CharField(Field):
|
||||||
|
|
||||||
# TODO: Maybe move this into contrib, because it's specialized.
|
# TODO: Maybe move this into contrib, because it's specialized.
|
||||||
class CommaSeparatedIntegerField(CharField):
|
class CommaSeparatedIntegerField(CharField):
|
||||||
pass
|
def formfield(self, **kwargs):
|
||||||
|
defaults = {
|
||||||
|
'form_class': forms.RegexField,
|
||||||
|
'regex': '^[\d,]+$',
|
||||||
|
'max_length': self.max_length,
|
||||||
|
'error_messages': {
|
||||||
|
'invalid': _(u'Enter only digits separated by commas.'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
defaults.update(kwargs)
|
||||||
|
return super(CommaSeparatedIntegerField, self).formfield(**defaults)
|
||||||
|
|
||||||
ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
|
ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,12 @@ class ImageFile(models.Model):
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.description
|
return self.description
|
||||||
|
|
||||||
|
class CommaSeparatedInteger(models.Model):
|
||||||
|
field = models.CommaSeparatedIntegerField(max_length=20)
|
||||||
|
|
||||||
|
def __unicode__(self):
|
||||||
|
return self.field
|
||||||
|
|
||||||
__test__ = {'API_TESTS': """
|
__test__ = {'API_TESTS': """
|
||||||
>>> from django import forms
|
>>> from django import forms
|
||||||
>>> from django.forms.models import ModelForm, model_to_dict
|
>>> from django.forms.models import ModelForm, model_to_dict
|
||||||
|
@ -1050,4 +1056,30 @@ True
|
||||||
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
|
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
|
||||||
<script type="text/javascript" src="/some/form/javascript"></script>
|
<script type="text/javascript" src="/some/form/javascript"></script>
|
||||||
|
|
||||||
|
>>> class CommaSeparatedIntegerForm(ModelForm):
|
||||||
|
... class Meta:
|
||||||
|
... model = CommaSeparatedInteger
|
||||||
|
|
||||||
|
>>> f = CommaSeparatedIntegerForm().fields['field']
|
||||||
|
>>> f.clean('1,2,3')
|
||||||
|
u'1,2,3'
|
||||||
|
>>> f.clean('1a,2')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'Enter only digits separated by commas.']
|
||||||
|
>>> f.clean(',,,,')
|
||||||
|
u',,,,'
|
||||||
|
>>> f.clean('1.2')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'Enter only digits separated by commas.']
|
||||||
|
>>> f.clean('1,a,2')
|
||||||
|
Traceback (most recent call last):
|
||||||
|
...
|
||||||
|
ValidationError: [u'Enter only digits separated by commas.']
|
||||||
|
>>> f.clean('1,,2')
|
||||||
|
u'1,,2'
|
||||||
|
>>> f.clean('1')
|
||||||
|
u'1'
|
||||||
|
|
||||||
"""}
|
"""}
|
||||||
|
|
Loading…
Reference in New Issue