summaryrefslogtreecommitdiff
path: root/tests/get_earliest_or_latest
diff options
context:
space:
mode:
authorPablo Pissi <pablopissi@gmail.com>2022-06-12 22:08:21 -0300
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-06-14 12:24:43 +0200
commitd287294885e116c49c87f0c663068511a8402c0f (patch)
tree19171842b0581e62dbf5eda6a56a66a37651c53a /tests/get_earliest_or_latest
parentdb588d4f0edde5095f8975be1da4e693268b86b3 (diff)
downloaddjango-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.py5
-rw-r--r--tests/get_earliest_or_latest/tests.py21
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()