Fixed #13004: Ensure the add page for a model with a ManyToManyField specified
in readonly_fields does not raise an exception. Thanks hejsan, mlavin, copelco. git-svn-id: http://code.djangoproject.com/svn/django/trunk@12827 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
8661cb9bd3
commit
f88c2f16e8
|
@ -154,7 +154,7 @@ class AdminReadonlyField(object):
|
||||||
field, obj, model_admin = self.field, self.form.instance, self.model_admin
|
field, obj, model_admin = self.field, self.form.instance, self.model_admin
|
||||||
try:
|
try:
|
||||||
f, attr, value = lookup_field(field, obj, model_admin)
|
f, attr, value = lookup_field(field, obj, model_admin)
|
||||||
except (AttributeError, ObjectDoesNotExist):
|
except (AttributeError, ValueError, ObjectDoesNotExist):
|
||||||
result_repr = EMPTY_CHANGELIST_VALUE
|
result_repr = EMPTY_CHANGELIST_VALUE
|
||||||
else:
|
else:
|
||||||
if f is None:
|
if f is None:
|
||||||
|
|
|
@ -565,6 +565,16 @@ class CyclicTwo(models.Model):
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
class Topping(models.Model):
|
||||||
|
name = models.CharField(max_length=20)
|
||||||
|
|
||||||
|
class Pizza(models.Model):
|
||||||
|
name = models.CharField(max_length=20)
|
||||||
|
toppings = models.ManyToManyField('Topping')
|
||||||
|
|
||||||
|
class PizzaAdmin(admin.ModelAdmin):
|
||||||
|
readonly_fields = ('toppings',)
|
||||||
|
|
||||||
admin.site.register(Article, ArticleAdmin)
|
admin.site.register(Article, ArticleAdmin)
|
||||||
admin.site.register(CustomArticle, CustomArticleAdmin)
|
admin.site.register(CustomArticle, CustomArticleAdmin)
|
||||||
admin.site.register(Section, save_as=True, inlines=[ArticleInline])
|
admin.site.register(Section, save_as=True, inlines=[ArticleInline])
|
||||||
|
@ -609,3 +619,5 @@ admin.site.register(CyclicTwo)
|
||||||
admin.site.register(Book, inlines=[ChapterInline])
|
admin.site.register(Book, inlines=[ChapterInline])
|
||||||
admin.site.register(Promo)
|
admin.site.register(Promo)
|
||||||
admin.site.register(ChapterXtra1)
|
admin.site.register(ChapterXtra1)
|
||||||
|
admin.site.register(Pizza, PizzaAdmin)
|
||||||
|
admin.site.register(Topping)
|
||||||
|
|
|
@ -1986,6 +1986,11 @@ class ReadonlyTest(TestCase):
|
||||||
p = Post.objects.order_by('-id')[0]
|
p = Post.objects.order_by('-id')[0]
|
||||||
self.assertEqual(p.posted, datetime.date.today())
|
self.assertEqual(p.posted, datetime.date.today())
|
||||||
|
|
||||||
|
def test_readonly_manytomany(self):
|
||||||
|
"Regression test for #13004"
|
||||||
|
response = self.client.get('/test_admin/admin/admin_views/pizza/add/')
|
||||||
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
class IncompleteFormTest(TestCase):
|
class IncompleteFormTest(TestCase):
|
||||||
"""
|
"""
|
||||||
Tests validation of a ModelForm that doesn't explicitly have all data
|
Tests validation of a ModelForm that doesn't explicitly have all data
|
||||||
|
|
Loading…
Reference in New Issue