1
0
mirror of https://github.com/django/django.git synced 2025-10-23 21:59:11 +00:00

Fixed #34437 -- Made values() resolving error mention selected annotations.

While the add_fields() call from set_values() does trigger validation it
does so after annotations are masked resulting in them being excluded
from the choices of valid options surfaced through a FieldError.
This commit is contained in:
Simon Charette
2023-03-25 15:22:45 -04:00
committed by GitHub
parent f5c5c571d3
commit cb13792938
2 changed files with 21 additions and 5 deletions

View File

@@ -33,6 +33,7 @@ from django.db.models.functions import (
Lower,
Trim,
)
from django.db.models.sql.query import get_field_names_from_opts
from django.test import TestCase, skipUnlessDBFeature
from django.test.utils import register_lookup
@@ -465,6 +466,16 @@ class NonAggregateAnnotationTestCase(TestCase):
)
)
def test_values_wrong_annotation(self):
expected_message = (
"Cannot resolve keyword 'annotation_typo' into field. Choices are: %s"
)
article_fields = ", ".join(
["annotation"] + sorted(get_field_names_from_opts(Book._meta))
)
with self.assertRaisesMessage(FieldError, expected_message % article_fields):
Book.objects.annotate(annotation=Value(1)).values_list("annotation_typo")
def test_decimal_annotation(self):
salary = Decimal(10) ** -Employee._meta.get_field("salary").decimal_places
Employee.objects.create(