summaryrefslogtreecommitdiff
path: root/tests/admin_changelist
diff options
context:
space:
mode:
authorVIZZARD-X <vigneshanandmay13@gmail.com>2026-01-10 02:26:37 +0530
committerJacob Walls <jacobtylerwalls@gmail.com>2026-02-13 16:58:36 -0500
commit08b4dfc5734f5d2fce685eabcd65385a6656db2f (patch)
tree468d1e7db12407c049e892181eb3ac3866b3ab05 /tests/admin_changelist
parent3dea5fed077e33c7d8bca4b5eeade5420cb05d27 (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.py174
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.