Commit f88c2f16 authored by Karen Tracey's avatar Karen Tracey
Browse files

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
parent 8661cb9b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ class AdminReadonlyField(object):
        field, obj, model_admin = self.field, self.form.instance, self.model_admin
        try:
            f, attr, value = lookup_field(field, obj, model_admin)
        except (AttributeError, ObjectDoesNotExist):
        except (AttributeError, ValueError, ObjectDoesNotExist):
            result_repr = EMPTY_CHANGELIST_VALUE
        else:
            if f is None:
+12 −0
Original line number Diff line number Diff line
@@ -565,6 +565,16 @@ class CyclicTwo(models.Model):
    def __unicode__(self):
        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(CustomArticle, CustomArticleAdmin)
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(Promo)
admin.site.register(ChapterXtra1)
admin.site.register(Pizza, PizzaAdmin)
admin.site.register(Topping)
+5 −0
Original line number Diff line number Diff line
@@ -1986,6 +1986,11 @@ class ReadonlyTest(TestCase):
        p = Post.objects.order_by('-id')[0]
        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):
    """
    Tests validation of a ModelForm that doesn't explicitly have all data