1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #34462 -- Made admin log actions in bulk.

This also deprecates ModelAdmin.log_deletion() and
LogEntryManager.log_action().
This commit is contained in:
Akash Kumar Sen
2023-06-12 08:50:55 +05:30
committed by Mariusz Felisiak
parent 45e0c5892f
commit 40b3975e7d
12 changed files with 374 additions and 70 deletions

View File

@@ -4,9 +4,11 @@ from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
from django.contrib.admin.views.main import IS_POPUP_VAR
from django.contrib.auth.models import Permission, User
from django.core import mail
from django.db import connection
from django.template.loader import render_to_string
from django.template.response import TemplateResponse
from django.test import TestCase, override_settings
from django.test.utils import CaptureQueriesContext
from django.urls import reverse
from .admin import SubscriberAdmin
@@ -74,8 +76,21 @@ class AdminActionsTest(TestCase):
self.assertContains(confirmation, "<li>Subscribers: 2</li>")
self.assertContains(confirmation, "<li>External subscribers: 1</li>")
self.assertContains(confirmation, ACTION_CHECKBOX_NAME, count=2)
self.client.post(
reverse("admin:admin_views_subscriber_changelist"), delete_confirmation_data
with CaptureQueriesContext(connection) as ctx:
self.client.post(
reverse("admin:admin_views_subscriber_changelist"),
delete_confirmation_data,
)
# Log entries are inserted in bulk.
self.assertEqual(
len(
[
q["sql"]
for q in ctx.captured_queries
if q["sql"].startswith("INSERT")
]
),
1,
)
self.assertEqual(Subscriber.objects.count(), 0)

View File

@@ -1,7 +1,6 @@
from django.contrib.admin.models import CHANGE, LogEntry
from django.contrib.admin.tests import AdminSeleniumTestCase
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator
from django.test import TestCase, override_settings
from django.urls import reverse
@@ -61,15 +60,13 @@ class SeleniumTests(AdminSeleniumTestCase):
password="secret",
email="super@example.com",
)
content_type_pk = ContentType.objects.get_for_model(User).pk
for i in range(1, 1101):
LogEntry.objects.log_action(
LogEntry.objects.log_actions(
self.superuser.pk,
content_type_pk,
self.superuser.pk,
repr(self.superuser),
[self.superuser],
CHANGE,
change_message=f"Changed something {i}",
single_object=True,
)
self.admin_login(
username="super",

View File

@@ -3808,33 +3808,27 @@ class AdminViewStringPrimaryKeyTest(TestCase):
r"""-_.!~*'() ;/?:@&=+$, <>#%" {}|\^[]`"""
)
cls.m1 = ModelWithStringPrimaryKey.objects.create(string_pk=cls.pk)
content_type_pk = ContentType.objects.get_for_model(
ModelWithStringPrimaryKey
).pk
user_pk = cls.superuser.pk
LogEntry.objects.log_action(
LogEntry.objects.log_actions(
user_pk,
content_type_pk,
cls.pk,
cls.pk,
[cls.m1],
2,
change_message="Changed something",
single_object=True,
)
LogEntry.objects.log_action(
LogEntry.objects.log_actions(
user_pk,
content_type_pk,
cls.pk,
cls.pk,
[cls.m1],
1,
change_message="Added something",
single_object=True,
)
LogEntry.objects.log_action(
LogEntry.objects.log_actions(
user_pk,
content_type_pk,
cls.pk,
cls.pk,
[cls.m1],
3,
change_message="Deleted something",
single_object=True,
)
def setUp(self):