Django

Code

Changeset 8173

Show
Ignore:
Timestamp:
08/01/08 13:55:43 (5 months ago)
Author:
brosner
Message:

Fixed #7885 -- Prevent duplicates in fields and fieldsets declarations. Thanks julien and wamberg for the patches.

Files:

Legend:

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

    r7971 r8173  
     1try: 
     2    set 
     3except NameError: 
     4    from sets import Set as set   # Python 2.3 fallback 
    15 
    26from django.core.exceptions import ImproperlyConfigured 
     
    166170        if cls.fieldsets: 
    167171            raise ImproperlyConfigured('Both fieldsets and fields are specified in %s.' % cls.__name__) 
     172        if len(cls.fields) > len(set(cls.fields)): 
     173            raise ImproperlyConfigured('There are duplicate field(s) in %s.fields' % cls.__name__) 
    168174 
    169175    # fieldsets 
     
    180186                        "%s.fieldsets[%d][1] field options dict." 
    181187                        % (cls.__name__, idx)) 
    182         for field in flatten_fieldsets(cls.fieldsets): 
     188        flattened_fieldsets = flatten_fieldsets(cls.fieldsets) 
     189        if len(flattened_fieldsets) > len(set(flattened_fieldsets)): 
     190            raise ImproperlyConfigured('There are duplicate field(s) in %s.fieldsets' % cls.__name__) 
     191        for field in flattened_fieldsets: 
    183192            _check_form_field_existsw("fieldsets[%d][1]['fields']" % idx, field) 
    184193 
  • django/trunk/tests/regressiontests/modeladmin/models.py

    r7971 r8173  
    347347ImproperlyConfigured: Both fieldsets and fields are specified in ValidationTestModelAdmin. 
    348348 
     349>>> class ValidationTestModelAdmin(ModelAdmin):  
     350...     fieldsets = [(None, {'fields': ['name', 'name']})]  
     351>>> validate(ValidationTestModelAdmin, ValidationTestModel)  
     352Traceback (most recent call last):  
     353...  
     354ImproperlyConfigured: There are duplicate field(s) in ValidationTestModelAdmin.fieldsets 
     355 
     356>>> class ValidationTestModelAdmin(ModelAdmin): 
     357...     fields = ["name", "name"] 
     358>>> validate(ValidationTestModelAdmin, ValidationTestModel) 
     359Traceback (most recent call last): 
     360... 
     361ImproperlyConfigured: There are duplicate field(s) in ValidationTestModelAdmin.fields 
     362 
    349363# form 
    350364