diff options
author | Pablo Pissi <pablopissi@gmail.com> | 2022-06-12 22:08:21 -0300 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-06-14 12:24:43 +0200 |
commit | d287294885e116c49c87f0c663068511a8402c0f (patch) | |
tree | 19171842b0581e62dbf5eda6a56a66a37651c53a /tests/get_earliest_or_latest | |
parent | db588d4f0edde5095f8975be1da4e693268b86b3 (diff) | |
download | django-d287294885e116c49c87f0c663068511a8402c0f.tar.gz |
Fixed #33772 -- Added QuerySet.first()/last() error message on unordered queryset with aggregation.
Diffstat (limited to 'tests/get_earliest_or_latest')
-rw-r--r-- | tests/get_earliest_or_latest/models.py | 5 | ||||
-rw-r--r-- | tests/get_earliest_or_latest/tests.py | 21 |
2 files changed, 25 insertions, 1 deletions
diff --git a/tests/get_earliest_or_latest/models.py b/tests/get_earliest_or_latest/models.py index 936011ab6b..bbf2075d36 100644 --- a/tests/get_earliest_or_latest/models.py +++ b/tests/get_earliest_or_latest/models.py @@ -16,6 +16,11 @@ class Person(models.Model): # Note that this model doesn't have "get_latest_by" set. +class Comment(models.Model): + article = models.ForeignKey(Article, on_delete=models.CASCADE) + likes_count = models.PositiveIntegerField() + + # Ticket #23555 - model with an intentionally broken QuerySet.__iter__ method. diff --git a/tests/get_earliest_or_latest/tests.py b/tests/get_earliest_or_latest/tests.py index cd63adb75d..21692590cc 100644 --- a/tests/get_earliest_or_latest/tests.py +++ b/tests/get_earliest_or_latest/tests.py @@ -1,8 +1,9 @@ from datetime import datetime +from django.db.models import Avg from django.test import TestCase -from .models import Article, IndexErrorArticle, Person +from .models import Article, Comment, IndexErrorArticle, Person class EarliestOrLatestTests(TestCase): @@ -245,3 +246,21 @@ class TestFirstLast(TestCase): expire_date=datetime(2005, 9, 1), ) check() + + def test_first_last_unordered_qs_aggregation_error(self): + a1 = Article.objects.create( + headline="Article 1", + pub_date=datetime(2005, 7, 26), + expire_date=datetime(2005, 9, 1), + ) + Comment.objects.create(article=a1, likes_count=5) + + qs = Comment.objects.values("article").annotate(avg_likes=Avg("likes_count")) + msg = ( + "Cannot use QuerySet.%s() on an unordered queryset performing aggregation. " + "Add an ordering with order_by()." + ) + with self.assertRaisesMessage(TypeError, msg % "first"): + qs.first() + with self.assertRaisesMessage(TypeError, msg % "last"): + qs.last() |