diff options
| author | VIZZARD-X <vigneshanandmay13@gmail.com> | 2026-01-10 02:26:37 +0530 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-02-13 16:58:36 -0500 |
| commit | 08b4dfc5734f5d2fce685eabcd65385a6656db2f (patch) | |
| tree | 468d1e7db12407c049e892181eb3ac3866b3ab05 /tests/admin_changelist | |
| parent | 3dea5fed077e33c7d8bca4b5eeade5420cb05d27 (diff) | |
Fixed #36857 -- Added QuerySet.totally_ordered property.
Thanks Simon Charette for the idea.
Diffstat (limited to 'tests/admin_changelist')
| -rw-r--r-- | tests/admin_changelist/tests.py | 174 |
1 files changed, 2 insertions, 172 deletions
diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py index a36574d4df..b067bc9660 100644 --- a/tests/admin_changelist/tests.py +++ b/tests/admin_changelist/tests.py @@ -17,14 +17,14 @@ from django.contrib.admin.views.main import ( ) from django.contrib.auth.models import User from django.contrib.messages.storage.cookie import CookieStorage -from django.db import DatabaseError, connection, models +from django.db import DatabaseError, connection from django.db.models import F, Field, IntegerField from django.db.models.functions import Upper from django.db.models.lookups import Contains, Exact from django.template import Context, Template, TemplateSyntaxError from django.test import TestCase, override_settings, skipUnlessDBFeature from django.test.client import RequestFactory -from django.test.utils import CaptureQueriesContext, isolate_apps, register_lookup +from django.test.utils import CaptureQueriesContext, register_lookup from django.urls import reverse from django.utils import formats @@ -1582,176 +1582,6 @@ class ChangeListTests(TestCase): OrderedObjectAdmin.ordering = ["id", "bool"] check_results_order(ascending=True) - @isolate_apps("admin_changelist") - def test_total_ordering_optimization(self): - class Related(models.Model): - unique_field = models.BooleanField(unique=True) - - class Meta: - ordering = ("unique_field",) - - class Model(models.Model): - unique_field = models.BooleanField(unique=True) - unique_nullable_field = models.BooleanField(unique=True, null=True) - related = models.ForeignKey(Related, models.CASCADE) - other_related = models.ForeignKey(Related, models.CASCADE) - related_unique = models.OneToOneField(Related, models.CASCADE) - field = models.BooleanField() - other_field = models.BooleanField() - null_field = models.BooleanField(null=True) - - class Meta: - unique_together = { - ("field", "other_field"), - ("field", "null_field"), - ("related", "other_related_id"), - } - - class ModelAdmin(admin.ModelAdmin): - def get_queryset(self, request): - return Model.objects.none() - - request = self._mocked_authenticated_request("/", self.superuser) - site = admin.AdminSite(name="admin") - model_admin = ModelAdmin(Model, site) - change_list = model_admin.get_changelist_instance(request) - tests = ( - ([], ["-pk"]), - # Unique non-nullable field. - (["unique_field"], ["unique_field"]), - (["-unique_field"], ["-unique_field"]), - # Unique nullable field. - (["unique_nullable_field"], ["unique_nullable_field", "-pk"]), - # Field. - (["field"], ["field", "-pk"]), - # Related field introspection is not implemented. - (["related__unique_field"], ["related__unique_field", "-pk"]), - # Related attname unique. - (["related_unique_id"], ["related_unique_id"]), - # Related ordering introspection is not implemented. - (["related_unique"], ["related_unique", "-pk"]), - # Composite unique. - (["field", "-other_field"], ["field", "-other_field"]), - # Composite unique nullable. - (["-field", "null_field"], ["-field", "null_field", "-pk"]), - # Composite unique and nullable. - ( - ["-field", "null_field", "other_field"], - ["-field", "null_field", "other_field"], - ), - # Composite unique attnames. - (["related_id", "-other_related_id"], ["related_id", "-other_related_id"]), - # Composite unique names. - (["related", "-other_related_id"], ["related", "-other_related_id", "-pk"]), - ) - # F() objects composite unique. - total_ordering = [F("field"), F("other_field").desc(nulls_last=True)] - # F() objects composite unique nullable. - non_total_ordering = [F("field"), F("null_field").desc(nulls_last=True)] - tests += ( - (total_ordering, total_ordering), - (non_total_ordering, non_total_ordering + ["-pk"]), - ) - for ordering, expected in tests: - with self.subTest(ordering=ordering): - self.assertEqual( - change_list._get_deterministic_ordering(ordering), expected - ) - - @isolate_apps("admin_changelist") - def test_total_ordering_optimization_meta_constraints(self): - class Related(models.Model): - unique_field = models.BooleanField(unique=True) - - class Meta: - ordering = ("unique_field",) - - class Model(models.Model): - field_1 = models.BooleanField() - field_2 = models.BooleanField() - field_3 = models.BooleanField() - field_4 = models.BooleanField() - field_5 = models.BooleanField() - field_6 = models.BooleanField() - nullable_1 = models.BooleanField(null=True) - nullable_2 = models.BooleanField(null=True) - related_1 = models.ForeignKey(Related, models.CASCADE) - related_2 = models.ForeignKey(Related, models.CASCADE) - related_3 = models.ForeignKey(Related, models.CASCADE) - related_4 = models.ForeignKey(Related, models.CASCADE) - - class Meta: - constraints = [ - *[ - models.UniqueConstraint(fields=fields, name="".join(fields)) - for fields in ( - ["field_1"], - ["nullable_1"], - ["related_1"], - ["related_2_id"], - ["field_2", "field_3"], - ["field_2", "nullable_2"], - ["field_2", "related_3"], - ["field_3", "related_4_id"], - ) - ], - models.CheckConstraint(condition=models.Q(id__gt=0), name="foo"), - models.UniqueConstraint( - fields=["field_5"], - condition=models.Q(id__gt=10), - name="total_ordering_1", - ), - models.UniqueConstraint( - fields=["field_6"], - condition=models.Q(), - name="total_ordering", - ), - ] - - class ModelAdmin(admin.ModelAdmin): - def get_queryset(self, request): - return Model.objects.none() - - request = self._mocked_authenticated_request("/", self.superuser) - site = admin.AdminSite(name="admin") - model_admin = ModelAdmin(Model, site) - change_list = model_admin.get_changelist_instance(request) - tests = ( - # Unique non-nullable field. - (["field_1"], ["field_1"]), - # Unique nullable field. - (["nullable_1"], ["nullable_1", "-pk"]), - # Related attname unique. - (["related_1_id"], ["related_1_id"]), - (["related_2_id"], ["related_2_id"]), - # Related ordering introspection is not implemented. - (["related_1"], ["related_1", "-pk"]), - # Composite unique. - (["-field_2", "field_3"], ["-field_2", "field_3"]), - # Composite unique nullable. - (["field_2", "-nullable_2"], ["field_2", "-nullable_2", "-pk"]), - # Composite unique and nullable. - ( - ["field_2", "-nullable_2", "field_3"], - ["field_2", "-nullable_2", "field_3"], - ), - # Composite field and related field name. - (["field_2", "-related_3"], ["field_2", "-related_3", "-pk"]), - (["field_3", "related_4"], ["field_3", "related_4", "-pk"]), - # Composite field and related field attname. - (["field_2", "related_3_id"], ["field_2", "related_3_id"]), - (["field_3", "-related_4_id"], ["field_3", "-related_4_id"]), - # Partial unique constraint is ignored. - (["field_5"], ["field_5", "-pk"]), - # Unique constraint with an empty condition. - (["field_6"], ["field_6"]), - ) - for ordering, expected in tests: - with self.subTest(ordering=ordering): - self.assertEqual( - change_list._get_deterministic_ordering(ordering), expected - ) - def test_dynamic_list_filter(self): """ Regression tests for ticket #17646: dynamic list_filter support. |
