Fixed #8027: correctly validate fields/fieldsets in `ModelAdmin` validation when using custom `ModelForm`s.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8662 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
b99cc935eb
commit
b31568aed3
|
@ -251,7 +251,7 @@ def get_field(cls, model, opts, label, field):
|
|||
% (cls.__name__, label, field, model.__name__))
|
||||
|
||||
def check_formfield(cls, model, opts, label, field):
|
||||
if hasattr(cls.form, 'base_fields'):
|
||||
if getattr(cls.form, 'base_fields', None):
|
||||
try:
|
||||
cls.form.base_fields[field]
|
||||
except KeyError:
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
"""
|
||||
Tests of ModelAdmin validation logic.
|
||||
"""
|
||||
|
||||
from django.db import models
|
||||
|
||||
class Song(models.Model):
|
||||
title = models.CharField(max_length=150)
|
||||
|
||||
class Meta:
|
||||
ordering = ('title',)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
||||
__test__ = {'API_TESTS':"""
|
||||
|
||||
>>> from django import forms
|
||||
>>> from django.contrib import admin
|
||||
>>> from django.contrib.admin.validation import validate
|
||||
|
||||
#
|
||||
# Regression test for #8027: custom ModelForms with fields/fieldsets
|
||||
#
|
||||
|
||||
>>> class SongForm(forms.ModelForm):
|
||||
... pass
|
||||
|
||||
>>> class ValidFields(admin.ModelAdmin):
|
||||
... form = SongForm
|
||||
... fields = ['title']
|
||||
|
||||
>>> class InvalidFields(admin.ModelAdmin):
|
||||
... form = SongForm
|
||||
... fields = ['spam']
|
||||
|
||||
>>> validate(ValidFields, Song)
|
||||
>>> validate(InvalidFields, Song)
|
||||
Traceback (most recent call last):
|
||||
...
|
||||
ImproperlyConfigured: 'InvalidFields.fields' refers to field 'spam' that is missing from the form.
|
||||
|
||||
"""}
|
Loading…
Reference in New Issue