Fixed #26390 -- Disabled grouping by Random().

Thanks to Tzu-ping Chung for the tests.
This commit is contained in:
Étienne Beaulé 2020-10-19 17:10:06 -04:00 committed by Mariusz Felisiak
parent 257f8495d6
commit 509d9da26f
3 changed files with 19 additions and 0 deletions

View File

@ -293,6 +293,7 @@ answer newbie questions, and generally made Django that much better:
Erwin Junge <erwin@junge.nl>
Esdras Beleza <linux@esdrasbeleza.com>
Espen Grindhaug <http://grindhaug.org/>
Étienne Beaulé <beauleetienne0@gmail.com>
Eugene Lazutkin <http://lazutkin.com/blog/>
Evan Grim <https://github.com/egrim>
Fabrice Aneche <akh@nobugware.com>

View File

@ -154,6 +154,9 @@ class Random(NumericOutputFieldMixin, Func):
def as_sqlite(self, compiler, connection, **extra_context):
return super().as_sql(compiler, connection, function='RAND', **extra_context)
def get_group_by_cols(self, alias=None):
return []
class Round(Transform):
function = 'ROUND'

View File

@ -1315,3 +1315,18 @@ class AggregateTestCase(TestCase):
# with self.assertNumQueries(1) as ctx:
# self.assertSequenceEqual(books_qs, [book])
# self.assertEqual(ctx[0]['sql'].count('SELECT'), 2)
def test_aggregation_random_ordering(self):
"""Random() is not included in the GROUP BY when used for ordering."""
authors = Author.objects.annotate(contact_count=Count('book')).order_by('?')
self.assertQuerysetEqual(authors, [
('Adrian Holovaty', 1),
('Jacob Kaplan-Moss', 1),
('Brad Dayley', 1),
('James Bennett', 1),
('Jeffrey Forcier', 1),
('Paul Bissex', 1),
('Wesley J. Chun', 1),
('Stuart Russell', 1),
('Peter Norvig', 2),
], lambda a: (a.name, a.contact_count), ordered=False)