2
0
Эх сурвалжийг харах

Fixed #36069 -- Fixed the delete button position in TabularInlines.

antoliny0919 2 сар өмнө
parent
commit
1330cb5705

+ 2 - 4
django/contrib/admin/templates/admin/edit_inline/tabular.html

@@ -23,7 +23,7 @@
        {% if field.help_text %}<img src="{% static "admin/img/icon-unknown.svg" %}" class="help help-tooltip" width="10" height="10" alt="({{ field.help_text|striptags }})" title="{{ field.help_text|striptags }}">{% endif %}
        </th>
      {% endfor %}
-     {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}<th>{% translate "Delete?" %}</th>{% endif %}
+     <th>{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}{% translate "Delete?" %}{% endif %}</th>
      </tr></thead>
 
      <tbody>
@@ -58,9 +58,7 @@
             {% endfor %}
           {% endfor %}
         {% endfor %}
-        {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
-          <td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
-        {% endif %}
+        <td class="delete">{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
         </tr>
      {% endfor %}
      </tbody>

+ 32 - 0
tests/admin_inlines/tests.py

@@ -19,6 +19,7 @@ from .models import (
     Child,
     ChildModel1,
     ChildModel2,
+    ExtraTerrestrial,
     Fashionista,
     FootNote,
     Holder,
@@ -2493,3 +2494,34 @@ class SeleniumTests(AdminSeleniumTestCase):
             tabular_inline.find_elements(By.CSS_SELECTOR, ".collapse"),
             [],
         )
+
+    @screenshot_cases(["desktop_size", "mobile_size", "rtl", "dark", "high_contrast"])
+    def test_tabular_inline_delete_layout(self):
+        from selenium.webdriver.common.by import By
+
+        user = User.objects.create_user("testing", password="password", is_staff=True)
+        et_permission = Permission.objects.filter(
+            content_type=ContentType.objects.get_for_model(ExtraTerrestrial),
+        )
+        s_permission = Permission.objects.filter(
+            codename__in=["view_sighting", "add_sighting"],
+            content_type=ContentType.objects.get_for_model(Sighting),
+        )
+        user.user_permissions.add(*et_permission, *s_permission)
+        self.admin_login(username="testing", password="password")
+        cf = ExtraTerrestrial.objects.create(name="test")
+        url = reverse("admin:admin_inlines_extraterrestrial_change", args=(cf.pk,))
+        self.selenium.get(self.live_server_url + url)
+        headers = self.selenium.find_elements(
+            By.CSS_SELECTOR, "fieldset.module thead tr th"
+        )
+        self.assertHTMLEqual(headers[-1].get_attribute("outerHTML"), "<th></th>")
+        delete = self.selenium.find_element(
+            By.CSS_SELECTOR,
+            "fieldset.module tbody tr.dynamic-sighting_set:not(.original) td.delete",
+        )
+        self.assertIn(
+            '<a role="button" class="inline-deletelink" href="#">',
+            delete.get_attribute("innerHTML"),
+        )
+        self.take_screenshot("loaded")