mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #12689: Fixed admin validation to report an error on invalid exclude specification. Thanks for report to bparker and for patch with tests to ramiro.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12734 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		| @@ -267,6 +267,19 @@ def validate_base(cls, model): | ||||
|         if len(flattened_fieldsets) > len(set(flattened_fieldsets)): | ||||
|             raise ImproperlyConfigured('There are duplicate field(s) in %s.fieldsets' % cls.__name__) | ||||
|  | ||||
|     # exclude | ||||
|     if cls.exclude: # default value is None | ||||
|         check_isseq(cls, 'exclude', cls.exclude) | ||||
|         for field in cls.exclude: | ||||
|             check_formfield(cls, model, opts, 'exclude', field) | ||||
|             try: | ||||
|                 f = opts.get_field(field) | ||||
|             except models.FieldDoesNotExist: | ||||
|                 # If we can't find a field on the model that matches, | ||||
|                 # it could be an extra field on the form. | ||||
|                 continue | ||||
|         if len(cls.exclude) > len(set(cls.exclude)): | ||||
|             raise ImproperlyConfigured('There are duplicate field(s) in %s.exclude' % cls.__name__) | ||||
|  | ||||
|     # form | ||||
|     if hasattr(cls, 'form') and not issubclass(cls.form, BaseModelForm): | ||||
|   | ||||
| @@ -72,6 +72,37 @@ Traceback (most recent call last): | ||||
|     ... | ||||
| ImproperlyConfigured: 'InvalidFields.fields' refers to field 'spam' that is missing from the form. | ||||
|  | ||||
| # Tests for basic validation of 'exclude' option values (#12689) | ||||
|  | ||||
| >>> class ExcludedFields1(admin.ModelAdmin): | ||||
| ...     exclude = ('foo') | ||||
|  | ||||
| >>> validate(ExcludedFields1, Book) | ||||
| Traceback (most recent call last): | ||||
|     ... | ||||
| ImproperlyConfigured: 'ExcludedFields1.exclude' must be a list or tuple. | ||||
|  | ||||
| >>> class ExcludedFields2(admin.ModelAdmin): | ||||
| ...     exclude = ('name', 'name') | ||||
|  | ||||
| >>> validate(ExcludedFields2, Book) | ||||
| Traceback (most recent call last): | ||||
|     ... | ||||
| ImproperlyConfigured: There are duplicate field(s) in ExcludedFields2.exclude | ||||
|  | ||||
| >>> class ExcludedFieldsInline(admin.TabularInline): | ||||
| ...     model = Song | ||||
| ...     exclude = ('foo') | ||||
|  | ||||
| >>> class ExcludedFieldsAlbumAdmin(admin.ModelAdmin): | ||||
| ...     model = Album | ||||
| ...     inlines = [ExcludedFieldsInline] | ||||
|  | ||||
| >>> validate(ExcludedFieldsAlbumAdmin, Album) | ||||
| Traceback (most recent call last): | ||||
|     ... | ||||
| ImproperlyConfigured: 'ExcludedFieldsInline.exclude' must be a list or tuple. | ||||
|  | ||||
| # Regression test for #9932 - exclude in InlineModelAdmin | ||||
| # should not contain the ForeignKey field used in ModelAdmin.model | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user