#36857: Add totally_ordered property to QuerySet to check for deterministic
ordering
-------------------------------------+-------------------------------------
     Reporter:  VIZZARD-X            |                     Type:  New
                                     |  feature
       Status:  new                  |                Component:  Database
                                     |  layer (models, ORM)
      Version:  6.0                  |                 Severity:  Normal
     Keywords:  ordering             |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
 Currently, `QuerySet.ordered` returns `True` if any ordering is applied,
 but this does not guarantee deterministic results. For example, ordering
 by a non-unique field (like `pub_date`) is considered "ordered", but the
 relative order of records with the same date is undefined and database-
 dependent.

 This lack of determinism causes issues in pagination and serialization
 (specifically for natural keys), where a stable sort order is required to
 ensure consistency.

 I propose adding a property (tentatively `totally_ordered`) to `QuerySet`
 that checks if the applied ordering is sufficient to guarantee a stable
 sort. This would verify if the order clauses include a unique field (like
 the primary key) or a set of fields covered by a unique constraint.

 Note: Similar logic already exists in
 `django.contrib.admin.views.main.ChangeList.get_ordering`. The plan is to
 extract that logic, make it public/reusable on `QuerySet`, and document
 it.

 Context: This feature was identified as a requirement for fixing #36750
 (deterministic M2M serialization).
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36857>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/0107019ba4273e51-298cb4b3-5112-4eb0-89ae-c792a9b91232-000000%40eu-central-1.amazonses.com.

Reply via email to