Author: jacob
Date: 2008-08-28 15:58:10 -0500 (Thu, 28 Aug 2008)
New Revision: 8682
Modified:
django/trunk/django/contrib/admin/options.py
django/trunk/django/contrib/admin/widgets.py
django/trunk/django/db/models/fields/__init__.py
django/trunk/tests/modeltests/model_forms/models.py
Log:
Fixed #8556: added a useful formfield to `CommaSeparatedIntegerField`. gkelly,
mattmcc, and kratorius all contributed portions of this patch.
Modified: django/trunk/django/contrib/admin/options.py
===================================================================
--- django/trunk/django/contrib/admin/options.py 2008-08-28 20:48:59 UTC
(rev 8681)
+++ django/trunk/django/contrib/admin/options.py 2008-08-28 20:58:10 UTC
(rev 8682)
@@ -94,6 +94,11 @@
kwargs['widget'] = widgets.AdminIntegerFieldWidget
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.
if isinstance(db_field, models.CharField):
kwargs['widget'] = widgets.AdminTextInputWidget
Modified: django/trunk/django/contrib/admin/widgets.py
===================================================================
--- django/trunk/django/contrib/admin/widgets.py 2008-08-28 20:48:59 UTC
(rev 8681)
+++ django/trunk/django/contrib/admin/widgets.py 2008-08-28 20:58:10 UTC
(rev 8682)
@@ -236,3 +236,10 @@
if attrs is not None:
final_attrs.update(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)
Modified: django/trunk/django/db/models/fields/__init__.py
===================================================================
--- django/trunk/django/db/models/fields/__init__.py 2008-08-28 20:48:59 UTC
(rev 8681)
+++ django/trunk/django/db/models/fields/__init__.py 2008-08-28 20:58:10 UTC
(rev 8682)
@@ -394,7 +394,17 @@
# TODO: Maybe move this into contrib, because it's specialized.
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}$')
Modified: django/trunk/tests/modeltests/model_forms/models.py
===================================================================
--- django/trunk/tests/modeltests/model_forms/models.py 2008-08-28 20:48:59 UTC
(rev 8681)
+++ django/trunk/tests/modeltests/model_forms/models.py 2008-08-28 20:58:10 UTC
(rev 8682)
@@ -98,6 +98,12 @@
def __unicode__(self):
return self.description
+class CommaSeparatedInteger(models.Model):
+ field = models.CommaSeparatedIntegerField(max_length=20)
+
+ def __unicode__(self):
+ return self.field
+
__test__ = {'API_TESTS': """
>>> from django import forms
>>> from django.forms.models import ModelForm, model_to_dict
@@ -1050,4 +1056,30 @@
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
<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'
+
"""}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---