Skip to content

Commit 9b067cc

Browse files
ClanEverauvipy
andauthored
fix: error when registering TaskResultAdmin on proxy model (#489)
* fix: error when registering TaskResultAdmin on proxy model * test: add test for registering TaskResultAdmin on proxy model * fix: conflicts in test_admin and test_migrations * Update t/unit/test_admin.py --------- Co-authored-by: Asif Saif Uddin {"Auvi":"অভি"} <auvipy@gmail.com>
1 parent 05a9288 commit 9b067cc

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed

django_celery_results/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def get_readonly_fields(self, request, obj=None):
6464
return self.readonly_fields
6565
else:
6666
return list({
67-
field.name for field in self.opts.local_fields
67+
field.name for field in self.model._meta.fields
6868
})
6969

7070

t/unit/test_admin.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from celery import uuid
2+
from django.apps import apps
3+
from django.contrib import admin
4+
from django.contrib.auth import get_user_model
5+
from django.test import TestCase
6+
from django.urls import (
7+
clear_url_caches,
8+
get_resolver,
9+
path,
10+
reverse,
11+
)
12+
13+
from django_celery_results.admin import TaskResultAdmin
14+
from django_celery_results.models import TaskResult
15+
16+
User = get_user_model()
17+
18+
19+
class TaskResultAdminTests(TestCase):
20+
app_name = "django_celery_results"
21+
model = TaskResult
22+
23+
def setUp(self):
24+
self.admin_user = User.objects.create_superuser(
25+
username="admin", email="admin@test.com", password="password"
26+
)
27+
self.client.login(username="admin", password="password")
28+
self.task_result = TaskResult.objects.create(
29+
task_id=uuid(), task_name="test_task"
30+
)
31+
32+
def test_add_view(self):
33+
url = reverse(
34+
f"admin:{self.app_name}_{self.model._meta.model_name}_add"
35+
)
36+
response = self.client.get(url)
37+
self.assertEqual(response.status_code, 200)
38+
39+
def test_change_view(self):
40+
url = reverse(
41+
f"admin:{self.app_name}_{self.model._meta.model_name}_change",
42+
args=[self.task_result.id],
43+
)
44+
response = self.client.get(url)
45+
self.assertEqual(response.status_code, 200)
46+
47+
48+
class TaskResultProxyAdminTests(TaskResultAdminTests):
49+
@classmethod
50+
def setUpClass(cls):
51+
super().setUpClass()
52+
53+
class TaskResultProxy(TaskResult):
54+
class Meta:
55+
proxy = True
56+
app_label = "django_celery_results"
57+
58+
cls.model = TaskResultProxy
59+
admin.site.register(TaskResultProxy, TaskResultAdmin)
60+
61+
# The temporary registration of admin requires refreshing the URL cache
62+
# Otherwise, it cannot be resolved
63+
default_resolver = get_resolver()
64+
cls.ori_url_patterns_0 = default_resolver.url_patterns[0]
65+
get_resolver().url_patterns[0] = path("admin/", admin.site.urls)
66+
clear_url_caches()
67+
68+
@classmethod
69+
def tearDownClass(cls):
70+
super().tearDownClass()
71+
72+
# Unregister the proxy model
73+
admin.site.unregister(cls.model)
74+
app_config = apps.get_app_config(cls.app_name)
75+
model_name = cls.model._meta.model_name
76+
if model_name in app_config.models:
77+
del app_config.models[model_name]
78+
79+
# Restore the original URL patterns
80+
get_resolver().url_patterns[0] = cls.ori_url_patterns_0
81+
clear_url_caches()

0 commit comments

Comments
 (0)