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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
@@ -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
|
||||
===============================
|
||||
|
||||
Reference in New Issue
Block a user