summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKen Whitesell <kenwhitesell@comcast.net>2021-09-13 21:10:38 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-09-18 20:10:06 +0200
commitd4a587a5fac5fbda4e5688029d8c4cb04bf81c36 (patch)
treefa0fc58d0052c234f595270ad22dd13d6d6e6af6
parent561a1c09058b0dec63474078319a5a894d680113 (diff)
[3.2.x] Fixed #33077 -- Fixed links to related models for admin's readonly fields in custom admin site.
Backport of 0a9aa02e6f1d1b9ceca155d281a2be624bb1d3a2 from main
-rw-r--r--django/contrib/admin/helpers.py6
-rw-r--r--docs/releases/3.2.8.txt3
-rw-r--r--tests/admin_views/admin.py2
-rw-r--r--tests/admin_views/tests.py14
4 files changed, 19 insertions, 6 deletions
diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py
index 6f0be6b148..d05d84eaf1 100644
--- a/django/contrib/admin/helpers.py
+++ b/django/contrib/admin/helpers.py
@@ -196,7 +196,11 @@ class AdminReadonlyField:
remote_field.model._meta.model_name,
)
try:
- url = reverse(url_name, args=[quote(remote_obj.pk)])
+ url = reverse(
+ url_name,
+ args=[quote(remote_obj.pk)],
+ current_app=self.model_admin.admin_site.name,
+ )
return format_html('<a href="{}">{}</a>', url, remote_obj)
except NoReverseMatch:
return str(remote_obj)
diff --git a/docs/releases/3.2.8.txt b/docs/releases/3.2.8.txt
index add283a672..8494b292cb 100644
--- a/docs/releases/3.2.8.txt
+++ b/docs/releases/3.2.8.txt
@@ -9,4 +9,5 @@ Django 3.2.8 fixes several bugs in 3.2.7.
Bugfixes
========
-* ...
+* Fixed a bug in Django 3.2 that caused incorrect links on read-only fields in
+ admin (:ticket:`33077`).
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index 5a3416d1fd..de4dda1787 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -1143,6 +1143,8 @@ site2.register(
raw_id_fields=['parent'],
)
site2.register(Person, save_as_continue=False)
+site2.register(ReadOnlyRelatedField, ReadOnlyRelatedFieldAdmin)
+site2.register(Language)
site7 = admin.AdminSite(name="admin7")
site7.register(Article, ArticleAdmin2)
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index b432a2a2e2..0e91240c15 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -5087,7 +5087,7 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
response = self.client.get(reverse('admin:admin_views_choice_change', args=(choice.pk,)))
self.assertContains(response, '<div class="readonly">No opinion</div>', html=True)
- def test_readonly_foreignkey_links(self):
+ def _test_readonly_foreignkey_links(self, admin_site):
"""
ForeignKey readonly fields render as links if the target model is
registered in admin.
@@ -5104,10 +5104,10 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
user=self.superuser,
)
response = self.client.get(
- reverse('admin:admin_views_readonlyrelatedfield_change', args=(obj.pk,)),
+ reverse(f'{admin_site}:admin_views_readonlyrelatedfield_change', args=(obj.pk,)),
)
# Related ForeignKey object registered in admin.
- user_url = reverse('admin:auth_user_change', args=(self.superuser.pk,))
+ user_url = reverse(f'{admin_site}:auth_user_change', args=(self.superuser.pk,))
self.assertContains(
response,
'<div class="readonly"><a href="%s">super</a></div>' % user_url,
@@ -5115,7 +5115,7 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
)
# Related ForeignKey with the string primary key registered in admin.
language_url = reverse(
- 'admin:admin_views_language_change',
+ f'{admin_site}:admin_views_language_change',
args=(quote(language.pk),),
)
self.assertContains(
@@ -5126,6 +5126,12 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
# Related ForeignKey object not registered in admin.
self.assertContains(response, '<div class="readonly">Chapter 1</div>', html=True)
+ def test_readonly_foreignkey_links_default_admin_site(self):
+ self._test_readonly_foreignkey_links('admin')
+
+ def test_readonly_foreignkey_links_custom_admin_site(self):
+ self._test_readonly_foreignkey_links('namespaced_admin')
+
def test_readonly_manytomany_backwards_ref(self):
"""
Regression test for #16433 - backwards references for related objects