﻿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
33304	Window(order_by) should allow usage of descending string syntax to be used	Simon Charette	nobody	"The `QuerySet.order_by` and [https://github.com/django/django/blob/a7e7043c8746933dafce652507d3b821801cdc7d/django/contrib/postgres/aggregates/mixins.py#L11-L14 some aggregates ordering kwarg] allows for the leading dash syntax to be used but `Window.order_by` doesn't as it solely wraps the provided `order_by` in `ExpressionList(expressions=order_by)`.

This makes for an inconsistent API so I suggest we reuse the logic in `OrderableAggMixin.__init__` in `Window.__init__`

As a related note it seems most of the logic of `OrderableAggMixin` could be simplified by using `ExpressionList`.

It's a shame that we used `ordering` and not `order_by` as a kwarg for `OrderableAggMixin` as it's now inconsistent. Also not sure how much of a ''public'' API the `OrderBy` expression is but I wish it was initially named `Sort` (or `Ordering`?) so that we could define

{{{#!python
class OrderBy(ExpressionList):
    template = 'ORDER BY %(expressions)'

    def __init__(self, *expressions, *extra):
        expressions = [
            (Sort(F(o[1:]), descending=True) if isinstance(o, str) and o[0] == '-' else o)
            for o in expressions
        ]
        super().__init__(*expressions, **extra)
}}}

And then simply use this abstraction in `Window` and Postgres orderable aggregates.

Assigning to myself as I plan to have a look at this in next few days."	Cleanup/optimization	assigned	Database layer (models, ORM)	dev	Normal				Unreviewed	0	0	0	0	0	0
