Django

Code

Changeset 8682

Show
Ignore:
Timestamp:
08/28/08 15:58:10 (3 months ago)
Author:
jacob
Message:

Fixed #8556: added a useful formfield to CommaSeparatedIntegerField. gkelly, mattmcc, and kratorius all contributed portions of this patch.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/options.py

    r8555 r8682  
    9393        if isinstance(db_field, models.IntegerField): 
    9494            kwargs['widget'] = widgets.AdminIntegerFieldWidget 
     95            return db_field.formfield(**kwargs) 
     96 
     97        # For CommaSeparatedIntegerFields, add a custom CSS class. 
     98        if isinstance(db_field, models.CommaSeparatedIntegerField): 
     99            kwargs['widget'] = widgets.AdminCommaSeparatedIntegerFieldWidget 
    95100            return db_field.formfield(**kwargs) 
    96101 
  • django/trunk/django/contrib/admin/widgets.py

    r8679 r8682  
    237237            final_attrs.update(attrs) 
    238238        super(AdminIntegerFieldWidget, self).__init__(attrs=final_attrs) 
     239 
     240class AdminCommaSeparatedIntegerFieldWidget(forms.TextInput): 
     241    def __init__(self, attrs=None): 
     242        final_attrs = {'class': 'vCommaSeparatedIntegerField'} 
     243        if attrs is not None: 
     244            final_attrs.update(attrs) 
     245        super(AdminCommaSeparatedIntegerFieldWidget, self).__init__(attrs=final_attrs) 
  • django/trunk/django/db/models/fields/__init__.py

    r8646 r8682  
    395395# TODO: Maybe move this into contrib, because it's specialized. 
    396396class CommaSeparatedIntegerField(CharField): 
    397     pass 
     397    def formfield(self, **kwargs): 
     398        defaults = { 
     399            'form_class': forms.RegexField, 
     400            'regex': '^[\d,]+$', 
     401            'max_length': self.max_length, 
     402            'error_messages': { 
     403                'invalid': _(u'Enter only digits separated by commas.'), 
     404            } 
     405        } 
     406        defaults.update(kwargs) 
     407        return super(CommaSeparatedIntegerField, self).formfield(**defaults) 
    398408 
    399409ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$') 
  • django/trunk/tests/modeltests/model_forms/models.py

    r8528 r8682  
    9898    def __unicode__(self): 
    9999        return self.description 
     100 
     101class CommaSeparatedInteger(models.Model): 
     102    field = models.CommaSeparatedIntegerField(max_length=20) 
     103 
     104    def __unicode__(self): 
     105        return self.field 
    100106 
    101107__test__ = {'API_TESTS': """ 
     
    10511057<script type="text/javascript" src="/some/form/javascript"></script> 
    10521058 
     1059>>> class CommaSeparatedIntegerForm(ModelForm): 
     1060...    class Meta: 
     1061...        model = CommaSeparatedInteger 
     1062 
     1063>>> f = CommaSeparatedIntegerForm().fields['field'] 
     1064>>> f.clean('1,2,3') 
     1065u'1,2,3' 
     1066>>> f.clean('1a,2') 
     1067Traceback (most recent call last): 
     1068... 
     1069ValidationError: [u'Enter only digits separated by commas.'] 
     1070>>> f.clean(',,,,')  
     1071u',,,,' 
     1072>>> f.clean('1.2') 
     1073Traceback (most recent call last): 
     1074... 
     1075ValidationError: [u'Enter only digits separated by commas.'] 
     1076>>> f.clean('1,a,2') 
     1077Traceback (most recent call last): 
     1078... 
     1079ValidationError: [u'Enter only digits separated by commas.'] 
     1080>>> f.clean('1,,2') 
     1081u'1,,2' 
     1082>>> f.clean('1') 
     1083u'1' 
     1084 
    10531085"""}