mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
[5.2.x] Fixed #36217 -- Restored pre_save/post_save signal emission via LogEntry.save() for single-object deletion in the admin.
Regression in40b3975e7d. Thanks smiling-watermelon for the report. Co-authored-by: Sarah Boyce <42296566+sarahboyce@users.noreply.github.com> Backport ofc09bceef68from main.
This commit is contained in:
committed by
Sarah Boyce
parent
0e3a6c5fec
commit
5997fdc921
@@ -5,6 +5,7 @@ from django.contrib.admin.models import ADDITION, CHANGE, DELETION, LogEntry
|
||||
from django.contrib.admin.utils import quote
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db.models.signals import post_save, pre_save
|
||||
from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
from django.utils import translation
|
||||
@@ -42,11 +43,23 @@ class LogEntryTests(TestCase):
|
||||
[cls.a1],
|
||||
CHANGE,
|
||||
change_message="Changed something",
|
||||
single_object=True,
|
||||
)
|
||||
|
||||
def setUp(self):
|
||||
self.client.force_login(self.user)
|
||||
self.signals = []
|
||||
|
||||
pre_save.connect(self.pre_save_listener, sender=LogEntry)
|
||||
self.addCleanup(pre_save.disconnect, self.pre_save_listener, sender=LogEntry)
|
||||
|
||||
post_save.connect(self.post_save_listener, sender=LogEntry)
|
||||
self.addCleanup(post_save.disconnect, self.post_save_listener, sender=LogEntry)
|
||||
|
||||
def pre_save_listener(self, instance, **kwargs):
|
||||
self.signals.append(("pre_save", instance))
|
||||
|
||||
def post_save_listener(self, instance, created, **kwargs):
|
||||
self.signals.append(("post_save", instance, created))
|
||||
|
||||
def test_logentry_save(self):
|
||||
"""
|
||||
@@ -288,6 +301,7 @@ class LogEntryTests(TestCase):
|
||||
for obj in queryset
|
||||
]
|
||||
self.assertSequenceEqual(logs, expected_log_values)
|
||||
self.assertEqual(self.signals, [])
|
||||
|
||||
# RemovedInDjango60Warning.
|
||||
def test_log_action_fallback(self):
|
||||
@@ -371,6 +385,8 @@ class LogEntryTests(TestCase):
|
||||
"created_1": "00:00",
|
||||
}
|
||||
changelist_url = reverse("admin:admin_utils_articleproxy_changelist")
|
||||
expected_signals = []
|
||||
self.assertEqual(self.signals, expected_signals)
|
||||
|
||||
# add
|
||||
proxy_add_url = reverse("admin:admin_utils_articleproxy_add")
|
||||
@@ -379,6 +395,10 @@ class LogEntryTests(TestCase):
|
||||
proxy_addition_log = LogEntry.objects.latest("id")
|
||||
self.assertEqual(proxy_addition_log.action_flag, ADDITION)
|
||||
self.assertEqual(proxy_addition_log.content_type, proxy_content_type)
|
||||
expected_signals.extend(
|
||||
[("pre_save", proxy_addition_log), ("post_save", proxy_addition_log, True)]
|
||||
)
|
||||
self.assertEqual(self.signals, expected_signals)
|
||||
|
||||
# change
|
||||
article_id = proxy_addition_log.object_id
|
||||
@@ -391,6 +411,10 @@ class LogEntryTests(TestCase):
|
||||
proxy_change_log = LogEntry.objects.latest("id")
|
||||
self.assertEqual(proxy_change_log.action_flag, CHANGE)
|
||||
self.assertEqual(proxy_change_log.content_type, proxy_content_type)
|
||||
expected_signals.extend(
|
||||
[("pre_save", proxy_change_log), ("post_save", proxy_change_log, True)]
|
||||
)
|
||||
self.assertEqual(self.signals, expected_signals)
|
||||
|
||||
# delete
|
||||
proxy_delete_url = reverse(
|
||||
@@ -401,6 +425,10 @@ class LogEntryTests(TestCase):
|
||||
proxy_delete_log = LogEntry.objects.latest("id")
|
||||
self.assertEqual(proxy_delete_log.action_flag, DELETION)
|
||||
self.assertEqual(proxy_delete_log.content_type, proxy_content_type)
|
||||
expected_signals.extend(
|
||||
[("pre_save", proxy_delete_log), ("post_save", proxy_delete_log, True)]
|
||||
)
|
||||
self.assertEqual(self.signals, expected_signals)
|
||||
|
||||
def test_action_flag_choices(self):
|
||||
tests = ((1, "Addition"), (2, "Change"), (3, "Deletion"))
|
||||
@@ -415,7 +443,6 @@ class LogEntryTests(TestCase):
|
||||
[self.a1],
|
||||
CHANGE,
|
||||
change_message="Article changed message",
|
||||
single_object=True,
|
||||
)
|
||||
c1 = Car.objects.create()
|
||||
LogEntry.objects.log_actions(
|
||||
@@ -423,7 +450,6 @@ class LogEntryTests(TestCase):
|
||||
[c1],
|
||||
ADDITION,
|
||||
change_message="Car created message",
|
||||
single_object=True,
|
||||
)
|
||||
exp_str_article = escape(str(self.a1))
|
||||
exp_str_car = escape(str(c1))
|
||||
|
||||
Reference in New Issue
Block a user