1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

Refs #36042 -- Raised ValueError when providing composite expressions to aggregates.

This commit is contained in:
Jacob Walls
2025-01-05 10:09:46 -05:00
committed by Sarah Boyce
parent 6eec703667
commit 470e5545e5
8 changed files with 39 additions and 5 deletions

View File

@@ -1105,6 +1105,14 @@ calling the appropriate methods on the wrapped expression.
``UNNEST``, etc.) to skip optimization and be properly evaluated when
annotations spawn rows themselves. Defaults to ``False``.
.. attribute:: allows_composite_expressions
.. versionadded:: 5.2
Tells Django that this expression allows composite expressions, for
example, to support :ref:`composite primary keys
<cpk-and-database-functions>`. Defaults to ``False``.
.. method:: resolve_expression(query=None, allow_joins=True, reuse=None, summarize=False, for_save=False)
Provides the chance to do any preprocessing or validation of

View File

@@ -330,6 +330,10 @@ Models
accepts a list of field names or expressions and returns a JSON array
containing those values.
* The new :attr:`.Expression.allows_composite_expressions` attribute specifies
that the expression allows composite expressions, for example, to support
:ref:`composite primary keys <cpk-and-database-functions>`.
Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~

View File

@@ -131,6 +131,8 @@ database.
``ForeignObject`` is an internal API. This means it is not covered by our
:ref:`deprecation policy <internal-release-deprecation-policy>`.
.. _cpk-and-database-functions:
Composite primary keys and database functions
=============================================
@@ -141,13 +143,15 @@ Many database functions only accept a single expression.
MAX("order_id") -- OK
MAX("product_id", "order_id") -- ERROR
As a consequence, they cannot be used with composite primary key references as
they are composed of multiple column expressions.
In these cases, providing a composite primary key reference raises a
``ValueError``, since it is composed of multiple column expressions. An
exception is made for ``Count``.
.. code-block:: python
Max("order_id") # OK
Max("pk") # ERROR
Max("pk") # ValueError
Count("pk") # OK
Composite primary keys in forms
===============================