summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Tracey <kmtracey@gmail.com>2010-03-08 20:36:37 +0000
committerKaren Tracey <kmtracey@gmail.com>2010-03-08 20:36:37 +0000
commit021ba30ad1d4fffada4f2d43d47a4704bcfca45e (patch)
tree24f5b58ec3e06defccc1de000f2e313a7bc700aa
parentf2bc4dd0a9e4676f77d4a1c0ddb5e836750f966c (diff)
Fixed #12481: Updated admin validation code to not reject non-editable fields in readonly_fields, since these are handled fine by the display code itself. Thanks lashni and Alex.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12730 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/validation.py6
-rw-r--r--tests/regressiontests/admin_validation/models.py1
-rw-r--r--tests/regressiontests/admin_validation/tests.py18
3 files changed, 25 insertions, 0 deletions
diff --git a/django/contrib/admin/validation.py b/django/contrib/admin/validation.py
index 94d4bbd9ce..f743f2c6c7 100644
--- a/django/contrib/admin/validation.py
+++ b/django/contrib/admin/validation.py
@@ -245,6 +245,12 @@ def validate_base(cls, model):
if type(fields) != tuple:
fields = (fields,)
for field in fields:
+ if field in cls.readonly_fields:
+ # Stuff can be put in fields that isn't actually a
+ # model field if it's in readonly_fields,
+ # readonly_fields will handle the validation of such
+ # things.
+ continue
check_formfield(cls, model, opts, "fieldsets[%d][1]['fields']" % idx, field)
try:
f = opts.get_field(field)
diff --git a/tests/regressiontests/admin_validation/models.py b/tests/regressiontests/admin_validation/models.py
index ef65c45352..b50764844e 100644
--- a/tests/regressiontests/admin_validation/models.py
+++ b/tests/regressiontests/admin_validation/models.py
@@ -12,6 +12,7 @@ class Album(models.Model):
class Song(models.Model):
title = models.CharField(max_length=150)
album = models.ForeignKey(Album)
+ original_release = models.DateField(editable=False)
class Meta:
ordering = ('title',)
diff --git a/tests/regressiontests/admin_validation/tests.py b/tests/regressiontests/admin_validation/tests.py
new file mode 100644
index 0000000000..9166360ae3
--- /dev/null
+++ b/tests/regressiontests/admin_validation/tests.py
@@ -0,0 +1,18 @@
+from django.contrib import admin
+from django.contrib.admin.validation import validate
+from django.test import TestCase
+
+from models import Song
+
+
+class ValidationTestCase(TestCase):
+ def test_readonly_and_editable(self):
+ class SongAdmin(admin.ModelAdmin):
+ readonly_fields = ["original_release"]
+ fieldsets = [
+ (None, {
+ "fields": ["title", "original_release"],
+ }),
+ ]
+
+ validate(SongAdmin, Song)