﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
30374	Paginator UnorderedObjectListWarning on union(all=True) of two sorted queries	Rich Rauenzahn	nobody	"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?

"	Bug	closed	Database layer (models, ORM)	dev	Normal	invalid			Unreviewed	0	0	0	0	0	0
