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__))
|
% (cls.__name__, label, field, model.__name__))
|
||||||
|
|
||||||
def check_formfield(cls, model, opts, label, field):
|
def check_formfield(cls, model, opts, label, field):
|
||||||
if hasattr(cls.form, 'base_fields'):
|
if getattr(cls.form, 'base_fields', None):
|
||||||
try:
|
try:
|
||||||
cls.form.base_fields[field]
|
cls.form.base_fields[field]
|
||||||
except KeyError:
|
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