Commit 09a01435 authored by Carl Meyer's avatar Carl Meyer
Browse files

Fixed #16838 -- Corrected broken add-another inline JS in admin with...

Fixed #16838 -- Corrected broken add-another inline JS in admin with related_name="+". Thanks jamesp for report and patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16860 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent b22a4fdc
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -926,7 +926,7 @@ class ModelAdmin(BaseModelAdmin):
            for FormSet, inline in zip(self.get_formsets(request), self.inline_instances):
                prefix = FormSet.get_default_prefix()
                prefixes[prefix] = prefixes.get(prefix, 0) + 1
                if prefixes[prefix] != 1:
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(data=request.POST, files=request.FILES,
                                  instance=new_object,
@@ -955,7 +955,7 @@ class ModelAdmin(BaseModelAdmin):
                                       self.inline_instances):
                prefix = FormSet.get_default_prefix()
                prefixes[prefix] = prefixes.get(prefix, 0) + 1
                if prefixes[prefix] != 1:
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(instance=self.model(), prefix=prefix,
                                  queryset=inline.queryset(request))
@@ -1025,7 +1025,7 @@ class ModelAdmin(BaseModelAdmin):
                                       self.inline_instances):
                prefix = FormSet.get_default_prefix()
                prefixes[prefix] = prefixes.get(prefix, 0) + 1
                if prefixes[prefix] != 1:
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(request.POST, request.FILES,
                                  instance=new_object, prefix=prefix,
@@ -1046,7 +1046,7 @@ class ModelAdmin(BaseModelAdmin):
            for FormSet, inline in zip(self.get_formsets(request, obj), self.inline_instances):
                prefix = FormSet.get_default_prefix()
                prefixes[prefix] = prefixes.get(prefix, 0) + 1
                if prefixes[prefix] != 1:
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(instance=obj, prefix=prefix,
                                  queryset=inline.queryset(request))
+9 −0
Original line number Diff line number Diff line
@@ -101,6 +101,14 @@ class NovelAdmin(admin.ModelAdmin):
    inlines = [ChapterInline]


class ConsigliereInline(admin.TabularInline):
    model = Consigliere


class SottoCapoInline(admin.TabularInline):
    model = SottoCapo


site.register(TitleCollection, inlines=[TitleInline])
# Test bug #12561 and #12778
# only ModelAdmin media
@@ -115,3 +123,4 @@ site.register(Novel, NovelAdmin)
site.register(Fashionista, inlines=[InlineWeakness])
site.register(Holder4, Holder4Admin)
site.register(Author, AuthorAdmin)
site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline])
+14 −0
Original line number Diff line number Diff line
@@ -122,3 +122,17 @@ class Novel(models.Model):
class Chapter(models.Model):
    novel = models.ForeignKey(Novel)


# Models for #16838
class CapoFamiglia(models.Model):
    name = models.CharField(max_length=100)


class Consigliere(models.Model):
    name = models.CharField(max_length=100)
    capo_famiglia = models.ForeignKey(CapoFamiglia, related_name='+')


class SottoCapo(models.Model):
    name = models.CharField(max_length=100)
    capo_famiglia = models.ForeignKey(CapoFamiglia, related_name='+')
+28 −1
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@ from django.test import TestCase

# local test models
from models import (Holder, Inner, Holder2, Inner2, Holder3,
    Inner3, Person, OutfitItem, Fashionista, Teacher, Parent, Child)
    Inner3, Person, OutfitItem, Fashionista, Teacher, Parent, Child,
    CapoFamiglia, Consigliere, SottoCapo)
from admin import InnerInline


@@ -115,6 +116,32 @@ class TestInline(TestCase):
        self.assertContains(response, '<p class="help">Awesome stacked help text is awesome.</p>', 4)
        self.assertContains(response, '<img src="/static/admin/img/icon-unknown.gif" class="help help-tooltip" width="10" height="10" alt="(Awesome tabular help text is awesome.)" title="Awesome tabular help text is awesome." />', 1)

    def test_non_related_name_inline(self):
        """
        Ensure that multiple inlines with related_name='+' have correct form
        prefixes. Bug #16838.
        """
        response = self.client.get('/admin/admin_inlines/capofamiglia/add/')

        self.assertContains(response,
                '<input type="hidden" name="-1-0-id" id="id_-1-0-id" />')
        self.assertContains(response,
                '<input type="hidden" name="-1-0-capo_famiglia" '
                'id="id_-1-0-capo_famiglia" />')
        self.assertContains(response,
                '<input id="id_-1-0-name" type="text" class="vTextField" '
                'name="-1-0-name" maxlength="100" />')

        self.assertContains(response,
                '<input type="hidden" name="-2-0-id" id="id_-2-0-id" />')
        self.assertContains(response,
                '<input type="hidden" name="-2-0-capo_famiglia" '
                'id="id_-2-0-capo_famiglia" />')
        self.assertContains(response,
                '<input id="id_-2-0-name" type="text" class="vTextField" '
                'name="-2-0-name" maxlength="100" />')


class TestInlineMedia(TestCase):
    urls = "regressiontests.admin_inlines.urls"
    fixtures = ['admin-views-users.xml']