#30374: Paginator UnorderedObjectListWarning on union(all=True) of two sorted
queries
------------------------------------------+------------------------
               Reporter:  Rich Rauenzahn  |          Owner:  nobody
                   Type:  Bug             |         Status:  new
              Component:  Uncategorized   |        Version:  1.11
               Severity:  Normal          |       Keywords:
           Triage Stage:  Unreviewed      |      Has patch:  0
    Needs documentation:  0               |    Needs tests:  0
Patch needs improvement:  0               |  Easy pickings:  0
                  UI/UX:  0               |
------------------------------------------+------------------------
 I wonder if this is a case you want to catch and *not* warn about.

 In my case, I'm doing this:

 {{{
 haves =
 
MyModel.objects.filter(foreign_relationship=4).order_by('foreign_relationship__value',
 'common_key')
 havenots = MyModel.objects.exclude(id__in=haves).order_by('common_key')
 query = haves.union(havenots, all=True)
 }}}

 I'm using this with a `Paginator`.  The `Paginator` complains the queries
 are not ordered, but they actually are (right?) due to the `all=True` in
 the `union`.

 Is this a case the warning ought to handle and ignore?

 The Django 1.11 source is:

 {{{
     def _check_object_list_is_ordered(self):
         """
         Warn if self.object_list is unordered (typically a QuerySet).
         """
         ordered = getattr(self.object_list, 'ordered', None)
         if ordered is not None and not ordered:
             obj_list_repr = (
                 '{} {}'.format(self.object_list.model,
 self.object_list.__class__.__name__)
                 if hasattr(self.object_list, 'model')
                 else '{!r}'.format(self.object_list)
             )
             warnings.warn(
                 'Pagination may yield inconsistent results with an
 unordered '
                 'object_list: {}.'.format(obj_list_repr),
                 UnorderedObjectListWarning,
                 stacklevel=3
             )
 }}}

 Should `union(..., all=True)` set ordered in the `QuerySet`?  Or maybe
 should it look and see if all the source queries are ordered and propagate
 that to the `QuerySet` `union` returns?

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30374>
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/051.4ee43a3d8335513493083b0a93a2842b%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to