diff options
| author | Daniel Hahler <git@thequod.de> | 2022-05-04 11:38:12 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-05-06 08:36:04 +0200 |
| commit | dddc8bc47d20083c63aea4a7acf1777ce197ec8d (patch) | |
| tree | 37d0f053e73586d69c20d4037273145a152e381c | |
| parent | faab9e6769b01c18d9e3a31504601452eede6150 (diff) | |
Fixed #33679 -- Fixed the last inline's id in admin for users without add permissions.
| -rw-r--r-- | django/contrib/admin/templates/admin/edit_inline/stacked.html | 2 | ||||
| -rw-r--r-- | django/contrib/admin/templates/admin/edit_inline/tabular.html | 2 | ||||
| -rw-r--r-- | tests/admin_views/tests.py | 14 |
3 files changed, 16 insertions, 2 deletions
diff --git a/django/contrib/admin/templates/admin/edit_inline/stacked.html b/django/contrib/admin/templates/admin/edit_inline/stacked.html index ccc7134c7b..457e84affe 100644 --- a/django/contrib/admin/templates/admin/edit_inline/stacked.html +++ b/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -12,7 +12,7 @@ {{ inline_admin_formset.formset.management_form }} {{ inline_admin_formset.formset.non_form_errors }} -{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}"> +{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if forloop.last and inline_admin_formset.has_add_permission %}empty{% else %}{{ forloop.counter0 }}{% endif %}"> <h3><b>{{ inline_admin_formset.opts.verbose_name|capfirst }}:</b> <span class="inline_label">{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} <a href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}" class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">{% if inline_admin_formset.has_change_permission %}{% translate "Change" %}{% else %}{% translate "View" %}{% endif %}</a>{% endif %} {% else %}#{{ forloop.counter }}{% endif %}</span> {% if inline_admin_form.show_url %}<a href="{{ inline_admin_form.absolute_url }}">{% translate "View on site" %}</a>{% endif %} diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html index 4c0a08cbfc..6b6bd1b4cf 100644 --- a/django/contrib/admin/templates/admin/edit_inline/tabular.html +++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -28,7 +28,7 @@ <tr class="row-form-errors"><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr> {% endif %} <tr class="form-row {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form{% endif %}" - id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}"> + id="{{ inline_admin_formset.formset.prefix }}-{% if forloop.last and inline_admin_formset.has_add_permission %}empty{% else %}{{ forloop.counter0 }}{% endif %}"> <td class="original"> {% if inline_admin_form.original or inline_admin_form.show_url %}<p> {% if inline_admin_form.original %} diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 145add114c..11b8aff346 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -2694,6 +2694,20 @@ class AdminViewPermissionsTest(TestCase): formset = response.context["inline_admin_formsets"][0] self.assertEqual(len(formset.forms), 3) + def test_change_view_with_view_only_last_inline(self): + self.viewuser.user_permissions.add( + get_perm(Section, get_permission_codename("view", Section._meta)) + ) + self.client.force_login(self.viewuser) + response = self.client.get( + reverse("admin:admin_views_section_change", args=(self.s1.pk,)) + ) + self.assertEqual(len(response.context["inline_admin_formsets"]), 1) + formset = response.context["inline_admin_formsets"][0] + self.assertEqual(len(formset.forms), 3) + # The last inline is not marked as empty. + self.assertContains(response, 'id="article_set-2"') + def test_change_view_with_view_and_add_inlines(self): """User has view and add permissions on the inline model.""" self.viewuser.user_permissions.add( |
