Django

Code

Changeset 8477

Show
Ignore:
Timestamp:
08/22/08 23:59:25 (3 months ago)
Author:
brosner
Message:

Fixed #8040 -- SlugField? now returns a proper formfield to deal with validation. Thanks Daniel Pope for the ticket and patch.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/db/models/fields/__init__.py

    r8348 r8477  
    891891        return "SlugField" 
    892892 
     893    def formfield(self, **kwargs): 
     894        defaults = {'form_class': forms.RegexField, 'regex': r'^[a-zA-Z0-9_-]+$', 
     895            'error_messages': {'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.")}, 
     896        } 
     897        defaults.update(kwargs) 
     898        return super(SlugField, self).formfield(**defaults) 
     899 
    893900class SmallIntegerField(IntegerField): 
    894901    def get_manipulator_field_objs(self): 
  • django/trunk/docs/modelforms.txt

    r8022 r8477  
    6666    ``PositiveIntegerField``         ``IntegerField`` 
    6767    ``PositiveSmallIntegerField``    ``IntegerField`` 
    68     ``SlugField``                    ``CharField`` 
     68    ``SlugField``                    ``RegexField`` accepting only letters, 
     69                                     numbers, underscores and hyphens 
    6970    ``SmallIntegerField``            ``IntegerField`` 
    7071    ``TextField``                    ``CharField`` with ``widget=Textarea`` 
  • django/trunk/tests/modeltests/model_forms/models.py

    r8469 r8477  
    302302 
    303303If you call save() with invalid data, you'll get a ValueError. 
    304 >>> f = CategoryForm({'name': '', 'slug': '', 'url': 'foo'}) 
     304>>> f = CategoryForm({'name': '', 'slug': 'not a slug!', 'url': 'foo'}) 
    305305>>> f.errors['name'] 
    306306[u'This field is required.'] 
    307307>>> f.errors['slug'] 
    308 [u'This field is required.'
     308[u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
    309309>>> f.cleaned_data 
    310310Traceback (most recent call last):