mirror of
				https://github.com/django/django.git
				synced 2025-10-30 09:06:13 +00:00 
			
		
		
		
	Removed versionadded/changed annotations for 4.1.
This commit is contained in:
		| @@ -319,8 +319,6 @@ reconstructing the field:: | ||||
| Field attributes not affecting database column definition | ||||
| --------------------------------------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| You can override ``Field.non_db_attrs`` to customize attributes of a field that | ||||
| don't affect a column definition. It's used during model migrations to detect | ||||
| no-op ``AlterField`` operations. | ||||
|   | ||||
| @@ -70,11 +70,6 @@ If rotating secret keys, you may use :setting:`SECRET_KEY_FALLBACKS`:: | ||||
| Ensure that old secret keys are removed from ``SECRET_KEY_FALLBACKS`` in a | ||||
| timely manner. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``SECRET_KEY_FALLBACKS`` setting was added to support rotating secret | ||||
|     keys. | ||||
|  | ||||
| :setting:`DEBUG` | ||||
| ---------------- | ||||
|  | ||||
|   | ||||
| @@ -83,11 +83,6 @@ MRO is an acronym for Method Resolution Order. | ||||
|         asynchronous (``async def``) and synchronous (``def``) handlers are | ||||
|         defined on a single view-class. | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             Compatibility with asynchronous (``async def``) method handlers was | ||||
|             added. | ||||
|  | ||||
|     .. method:: setup(request, *args, **kwargs) | ||||
|  | ||||
|         Performs key view initialization prior to :meth:`dispatch`. | ||||
| @@ -126,11 +121,6 @@ MRO is an acronym for Method Resolution Order. | ||||
|         (``async def``) then the response will be wrapped in a coroutine | ||||
|         function for use with ``await``. | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             Compatibility with classes defining asynchronous (``async def``) | ||||
|             method handlers was added. | ||||
|  | ||||
| ``TemplateView`` | ||||
| ================ | ||||
|  | ||||
|   | ||||
| @@ -1186,22 +1186,6 @@ subclass:: | ||||
|     :meth:`ModelAdmin.get_search_results` to provide additional or alternate | ||||
|     search behavior. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         Searches using multiple search terms are now applied in a single call | ||||
|         to ``filter()``, rather than in sequential ``filter()`` calls. | ||||
|  | ||||
|         For multi-valued relationships, this means that rows from the related | ||||
|         model must match all terms rather than any term. For example, if | ||||
|         ``search_fields`` is set to ``['child__name', 'child__age']``, and a | ||||
|         user searches for ``'Jamal 17'``, parent rows will be returned only if | ||||
|         there is a relationship to some 17-year-old child named Jamal, rather | ||||
|         than also returning parents who merely have a younger or older child | ||||
|         named Jamal in addition to some other 17-year-old. | ||||
|  | ||||
|         See the :ref:`spanning-multi-valued-relationships` topic for more | ||||
|         discussion of this difference. | ||||
|  | ||||
| .. attribute:: ModelAdmin.search_help_text | ||||
|  | ||||
|     Set ``search_help_text`` to specify a descriptive text for the search box | ||||
| @@ -1418,22 +1402,6 @@ templates used by the :class:`ModelAdmin` views: | ||||
|     field, for example ``... OR UPPER("polls_choice"."votes"::text) = UPPER('4')`` | ||||
|     on PostgreSQL. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         Searches using multiple search terms are now applied in a single call | ||||
|         to ``filter()``, rather than in sequential ``filter()`` calls. | ||||
|  | ||||
|         For multi-valued relationships, this means that rows from the related | ||||
|         model must match all terms rather than any term. For example, if | ||||
|         ``search_fields`` is set to ``['child__name', 'child__age']``, and a | ||||
|         user searches for ``'Jamal 17'``, parent rows will be returned only if | ||||
|         there is a relationship to some 17-year-old child named Jamal, rather | ||||
|         than also returning parents who merely have a younger or older child | ||||
|         named Jamal in addition to some other 17-year-old. | ||||
|  | ||||
|         See the :ref:`spanning-multi-valued-relationships` topic for more | ||||
|         discussion of this difference. | ||||
|  | ||||
| .. _Solr: https://solr.apache.org | ||||
| .. _Haystack: https://haystacksearch.org | ||||
|  | ||||
| @@ -1999,10 +1967,6 @@ Other methods | ||||
|     Django view for the page that shows the modification history for a given | ||||
|     model instance. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         Pagination was added. | ||||
|  | ||||
| Unlike the hook-type ``ModelAdmin`` methods detailed in the previous section, | ||||
| these five methods are in reality designed to be invoked as Django views from | ||||
| the admin application URL dispatching handler to render the pages that deal | ||||
| @@ -2725,11 +2689,6 @@ linked to the document in ``{% block dark-mode-vars %}``. | ||||
|  | ||||
| .. _prefers-color-scheme: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The dark mode variables were moved to a separate stylesheet and template | ||||
|     block. | ||||
|  | ||||
| ``AdminSite`` objects | ||||
| ===================== | ||||
|  | ||||
| @@ -2900,10 +2859,6 @@ Templates can override or extend base admin templates as described in | ||||
|     You can override this method to change the default order on the admin index | ||||
|     page. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``app_label`` argument was added. | ||||
|  | ||||
| .. method:: AdminSite.has_permission(request) | ||||
|  | ||||
|     Returns ``True`` if the user for the given ``HttpRequest`` has permission | ||||
|   | ||||
| @@ -12,12 +12,6 @@ in the admin change form. The ``formset:added`` and ``formset:removed`` events | ||||
| allow this. ``event.detail.formsetName`` is the formset the row belongs to. | ||||
| For the ``formset:added`` event, ``event.target`` is the newly added row. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the event was a ``jQuery`` event with ``$row`` and | ||||
|     ``formsetName`` parameters. It is now a JavaScript ``CustomEvent`` with | ||||
|     parameters set in ``event.detail``. | ||||
|  | ||||
| In your custom ``change_form.html`` template, extend the | ||||
| ``admin_change_form_document_ready`` block and add the event listener code: | ||||
|  | ||||
|   | ||||
| @@ -666,10 +666,6 @@ The following backends are available in :mod:`django.contrib.auth.backends`: | ||||
|         if it wasn't provided to :func:`~django.contrib.auth.authenticate` | ||||
|         (which passes it on to the backend). | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             The ``created`` argument was added. | ||||
|  | ||||
|     .. method:: user_can_authenticate() | ||||
|  | ||||
|         Returns whether the user is allowed to authenticate. This method | ||||
|   | ||||
| @@ -659,8 +659,6 @@ Other Properties & Methods | ||||
|  | ||||
| .. method:: GEOSGeometry.make_valid() | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     Returns a valid :class:`GEOSGeometry` equivalent, trying not to lose any of | ||||
|     the input vertices. If the geometry is already valid, it is returned | ||||
|     untouched. This is similar to the | ||||
| @@ -680,10 +678,6 @@ Other Properties & Methods | ||||
|         >>> print(g) | ||||
|         MULTIPOINT (2 2, 1 1, 0 0) | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``clone`` argument was added. | ||||
|  | ||||
| ``Point`` | ||||
| --------- | ||||
|  | ||||
|   | ||||
| @@ -78,8 +78,6 @@ General-purpose aggregation functions | ||||
| ``BitXor`` | ||||
| ---------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. class:: BitXor(expression, filter=None, default=None, **extra) | ||||
|  | ||||
|     Returns an ``int`` of the bitwise ``XOR`` of all non-null input values, or | ||||
|   | ||||
| @@ -30,11 +30,6 @@ PostgreSQL supports additional data integrity constraints available from the | ||||
|     Exclusion constraints are checked during the :ref:`model validation | ||||
|     <validating-objects>`. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         In older versions, exclusion constraints were not checked during model | ||||
|         validation. | ||||
|  | ||||
| ``name`` | ||||
| -------- | ||||
|  | ||||
| @@ -71,10 +66,6 @@ For example:: | ||||
|  | ||||
| creates an exclusion constraint on ``circle`` using ``circle_ops``. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for the ``OpClass()`` expression was added. | ||||
|  | ||||
| .. _operator class: https://www.postgresql.org/docs/current/indexes-opclass.html | ||||
|  | ||||
| ``index_type`` | ||||
| @@ -142,11 +133,6 @@ used for queries that select only included fields | ||||
| ``include`` is supported for GiST indexes. PostgreSQL 14+ also supports | ||||
| ``include`` for SP-GiST indexes. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for covering exclusion constraints using SP-GiST indexes on | ||||
|     PostgreSQL 14+ was added. | ||||
|  | ||||
| ``opclasses`` | ||||
| ------------- | ||||
|  | ||||
| @@ -176,8 +162,6 @@ creates an exclusion constraint on ``circle`` using ``circle_ops``. | ||||
| ``violation_error_message`` | ||||
| --------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| The error message used when ``ValidationError`` is raised during | ||||
| :ref:`model validation <validating-objects>`. Defaults to | ||||
| :attr:`.BaseConstraint.violation_error_message`. | ||||
|   | ||||
| @@ -586,8 +586,6 @@ the ``default_bounds`` argument. | ||||
|  | ||||
|     .. attribute:: DecimalRangeField.default_bounds | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         Optional. The value of ``bounds`` for list and tuple inputs. The | ||||
|         default is lower bound included, upper bound excluded, that is ``[)`` | ||||
|         (see the PostgreSQL documentation for details about | ||||
| @@ -606,8 +604,6 @@ the ``default_bounds`` argument. | ||||
|  | ||||
|     .. attribute:: DateTimeRangeField.default_bounds | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         Optional. The value of ``bounds`` for list and tuple inputs. The | ||||
|         default is lower bound included, upper bound excluded, that is ``[)`` | ||||
|         (see the PostgreSQL documentation for details about | ||||
|   | ||||
| @@ -133,10 +133,6 @@ available from the ``django.contrib.postgres.indexes`` module. | ||||
|     Provide an integer value from 10 to 100 to the fillfactor_ parameter to | ||||
|     tune how packed the index pages will be. PostgreSQL's default is 90. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         Support for covering SP-GiST indexes on PostgreSQL 14+ was added. | ||||
|  | ||||
|     .. _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS | ||||
|  | ||||
| ``OpClass()`` expressions | ||||
| @@ -178,8 +174,4 @@ available from the ``django.contrib.postgres.indexes`` module. | ||||
|  | ||||
|     creates an exclusion constraint on ``circle`` using ``circle_ops``. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         Support for exclusion constraints was added. | ||||
|  | ||||
|     .. _operator class: https://www.postgresql.org/docs/current/indexes-opclass.html | ||||
|   | ||||
| @@ -296,8 +296,6 @@ Note: | ||||
|  | ||||
|     .. method:: Sitemap.get_latest_lastmod() | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         **Optional.** A method that returns the latest value returned by | ||||
|         :attr:`~Sitemap.lastmod`. This function is used to add the ``lastmod`` | ||||
|         attribute to :ref:`Sitemap index context | ||||
| @@ -465,10 +463,6 @@ with a caching decorator -- you must name your sitemap view and pass | ||||
|              {'sitemaps': sitemaps}, name='sitemaps'), | ||||
|     ] | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Use of the ``Last-Modified`` header was added. | ||||
|  | ||||
| Template customization | ||||
| ====================== | ||||
|  | ||||
| @@ -516,11 +510,6 @@ attributes: | ||||
| - ``lastmod``: Populated by the :meth:`~Sitemap.get_latest_lastmod` | ||||
|   method for each sitemap. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The context was changed to a list of objects with ``location`` and optional | ||||
|     ``lastmod`` attributes. | ||||
|  | ||||
| Sitemap | ||||
| ------- | ||||
|  | ||||
|   | ||||
| @@ -330,10 +330,6 @@ argument. For example:: | ||||
|             manifest_storage = StaticFilesStorage(location=settings.BASE_DIR) | ||||
|             super().__init__(*args, manifest_storage=manifest_storage, **kwargs) | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for finding paths in CSS source map comments was added. | ||||
|  | ||||
| .. versionchanged:: 4.2 | ||||
|  | ||||
|     Support for finding paths to JavaScript modules in ``import`` and | ||||
|   | ||||
| @@ -82,10 +82,6 @@ The CSRF protection is based on the following things: | ||||
|    Expanding the accepted referers beyond the current host or cookie domain can | ||||
|    be done with the :setting:`CSRF_TRUSTED_ORIGINS` setting. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the CSRF cookie value was masked. | ||||
|  | ||||
| This ensures that only forms that have originated from trusted domains can be | ||||
| used to POST data back. | ||||
|  | ||||
|   | ||||
| @@ -72,10 +72,6 @@ connections, e.g. after database server restart. The health check is performed | ||||
| only once per request and only if the database is being accessed during the | ||||
| handling of the request. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The :setting:`CONN_HEALTH_CHECKS` setting was added. | ||||
|  | ||||
| Caveats | ||||
| ~~~~~~~ | ||||
|  | ||||
| @@ -367,11 +363,6 @@ If you need to specify such values, reset the sequence afterward to avoid | ||||
| reusing a value that's already in the table. The :djadmin:`sqlsequencereset` | ||||
| management command generates the SQL statements to do that. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, PostgreSQL’s ``SERIAL`` data type was used instead of | ||||
|     identity columns. | ||||
|  | ||||
| .. _sequence: https://www.postgresql.org/docs/current/sql-createsequence.html | ||||
|  | ||||
| Test database templates | ||||
|   | ||||
| @@ -715,8 +715,6 @@ migrations are detected. | ||||
|  | ||||
| .. django-admin-option:: --scriptable | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Diverts log output and input prompts to ``stderr``, writing only paths of | ||||
| generated migration files to ``stdout``. | ||||
|  | ||||
| @@ -805,8 +803,6 @@ detected. | ||||
|  | ||||
| .. django-admin-option:: --prune | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Deletes nonexistent migrations from the ``django_migrations`` table. This is | ||||
| useful when migration files replaced by a squashed migration have been removed. | ||||
| See :ref:`migration-squashing` for more details. | ||||
| @@ -814,8 +810,6 @@ See :ref:`migration-squashing` for more details. | ||||
| ``optimizemigration`` | ||||
| --------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. django-admin:: optimizemigration app_label migration_name | ||||
|  | ||||
| Optimizes the operations for the named migration and overrides the existing | ||||
| @@ -1961,8 +1955,6 @@ See :doc:`/howto/custom-management-commands` for how to add customized actions. | ||||
| Black formatting | ||||
| ---------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| The Python files created by :djadmin:`startproject`, :djadmin:`startapp`, | ||||
| :djadmin:`optimizemigration`, :djadmin:`makemigrations`, and | ||||
| :djadmin:`squashmigrations` are formatted using the ``black`` command if it is | ||||
|   | ||||
| @@ -539,11 +539,6 @@ By default, a property returning the value of the renderer's | ||||
| as a string template name in order to override that for a particular form | ||||
| class. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions ``template_name`` defaulted to the string value | ||||
|     ``'django/forms/default.html'``. | ||||
|  | ||||
| ``render()`` | ||||
| ~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -604,14 +599,10 @@ template name. | ||||
|  | ||||
| .. attribute:: Form.template_name_div | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| The template used by ``as_div()``. Default: ``'django/forms/div.html'``. | ||||
|  | ||||
| .. method:: Form.as_div() | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| ``as_div()`` renders the form as a series of ``<div>`` elements, with each | ||||
| ``<div>`` containing one field, such as: | ||||
|  | ||||
| @@ -1196,8 +1187,6 @@ Attributes of ``BoundField`` | ||||
|  | ||||
| .. attribute:: BoundField.use_fieldset | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     Returns the value of this BoundField widget's ``use_fieldset`` attribute. | ||||
|  | ||||
| .. attribute:: BoundField.widget_type | ||||
| @@ -1292,14 +1281,8 @@ Methods of ``BoundField`` | ||||
|     overriding the default template, see also | ||||
|     :ref:`overriding-built-in-form-templates`. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``tag`` argument was added. | ||||
|  | ||||
| .. method:: BoundField.legend_tag(contents=None, attrs=None, label_suffix=None) | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     Calls :meth:`.label_tag` with ``tag='legend'`` to render the label with | ||||
|     ``<legend>`` tags. This is useful when rendering radio and multiple | ||||
|     checkbox widgets where ``<legend>`` may be more appropriate than a | ||||
|   | ||||
| @@ -527,10 +527,6 @@ For each field, we describe the default widget used if you don't specify | ||||
|  | ||||
|         Limit valid inputs to an integral multiple of ``step_size``. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``step_size`` argument was added. | ||||
|  | ||||
| ``DurationField`` | ||||
| ----------------- | ||||
|  | ||||
| @@ -662,8 +658,6 @@ For each field, we describe the default widget used if you don't specify | ||||
|  | ||||
|     .. attribute:: step_size | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         Limit valid inputs to an integral multiple of ``step_size``. | ||||
|  | ||||
| ``GenericIPAddressField`` | ||||
| @@ -797,8 +791,6 @@ For each field, we describe the default widget used if you don't specify | ||||
|  | ||||
|     .. attribute:: step_size | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         Limit valid inputs to an integral multiple of ``step_size``. | ||||
|  | ||||
| ``JSONField`` | ||||
|   | ||||
| @@ -72,10 +72,6 @@ Model Form API reference. For introductory material about model forms, see the | ||||
|  | ||||
|     See :ref:`model-formsets` for example usage. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``edit_only`` argument was added. | ||||
|  | ||||
| ``inlineformset_factory`` | ||||
| ========================= | ||||
|  | ||||
| @@ -89,7 +85,3 @@ Model Form API reference. For introductory material about model forms, see the | ||||
|     the ``parent_model``, you must specify a ``fk_name``. | ||||
|  | ||||
|     See :ref:`inline-formsets` for example usage. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``edit_only`` argument was added. | ||||
|   | ||||
| @@ -49,8 +49,6 @@ should return a rendered templates (as a string) or raise | ||||
|  | ||||
|     .. attribute:: form_template_name | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         The default name of the template to use to render a form. | ||||
|  | ||||
|         Defaults to ``"django/forms/default.html"``, which is a proxy for | ||||
| @@ -64,8 +62,6 @@ should return a rendered templates (as a string) or raise | ||||
|  | ||||
|     .. attribute:: formset_template_name | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         The default name of the template to use to render a formset. | ||||
|  | ||||
|         Defaults to ``"django/forms/formsets/default.html"``, which is a proxy | ||||
| @@ -111,8 +107,6 @@ If you want to render templates with customizations from your | ||||
|  | ||||
| .. class:: DjangoDivFormRenderer | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Subclass of :class:`DjangoTemplates` that specifies | ||||
| :attr:`~BaseRenderer.form_template_name` and | ||||
| :attr:`~BaseRenderer.formset_template_name` as ``"django/forms/div.html"`` and | ||||
| @@ -147,8 +141,6 @@ widgets due to their usage of Django template tags. | ||||
|  | ||||
| .. class:: Jinja2DivFormRenderer | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| A transitional renderer as per :class:`DjangoDivFormRenderer` above, but | ||||
| subclassing :class:`Jinja2` for use with the Jinja2 backend. | ||||
|  | ||||
|   | ||||
| @@ -318,8 +318,6 @@ foundation for custom widgets. | ||||
|  | ||||
|     .. attribute:: Widget.use_fieldset | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         An attribute to identify if the widget should be grouped in a | ||||
|         ``<fieldset>`` with a ``<legend>`` when rendered. Defaults to ``False`` | ||||
|         but is ``True`` when the widget contains multiple ``<input>`` tags such as | ||||
|   | ||||
| @@ -244,8 +244,6 @@ Removes the index named ``name`` from the model with ``model_name``. | ||||
| ``RenameIndex`` | ||||
| --------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. class:: RenameIndex(model_name, new_name, old_name=None, old_fields=None) | ||||
|  | ||||
| Renames an index in the database table for the model with ``model_name``. | ||||
|   | ||||
| @@ -45,10 +45,6 @@ option. | ||||
|     ``django.db.models`` logger, like *"Got a database error calling check() on | ||||
|     …"* to confirm it's validated properly. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, constraints were not checked during model validation. | ||||
|  | ||||
| ``BaseConstraint`` | ||||
| ================== | ||||
|  | ||||
| @@ -71,8 +67,6 @@ constraint. | ||||
| ``violation_error_message`` | ||||
| --------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. attribute:: BaseConstraint.violation_error_message | ||||
|  | ||||
| The error message used when ``ValidationError`` is raised during | ||||
| @@ -82,8 +76,6 @@ The error message used when ``ValidationError`` is raised during | ||||
| ``validate()`` | ||||
| -------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. method:: BaseConstraint.validate(model, instance, exclude=None, using=DEFAULT_DB_ALIAS) | ||||
|  | ||||
| Validates that the constraint, defined on ``model``, is respected on the | ||||
| @@ -122,10 +114,6 @@ ensures the age field is never less than 18. | ||||
|  | ||||
|         CheckConstraint(check=Q(age__gte=18) | Q(age__isnull=True), name='age_gte_18') | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``violation_error_message`` argument was added. | ||||
|  | ||||
| ``UniqueConstraint`` | ||||
| ==================== | ||||
|  | ||||
| @@ -253,8 +241,6 @@ creates a unique index on ``username`` using ``varchar_pattern_ops``. | ||||
| ``violation_error_message`` | ||||
| --------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. attribute:: UniqueConstraint.violation_error_message | ||||
|  | ||||
| The error message used when ``ValidationError`` is raised during | ||||
|   | ||||
| @@ -784,10 +784,6 @@ and second row. | ||||
| The ``frame`` parameter specifies which other rows that should be used in the | ||||
| computation. See :ref:`window-frames` for details. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for ``order_by`` by field name references was added. | ||||
|  | ||||
| For example, to annotate each movie with the average rating for the movies by | ||||
| the same studio in the same genre and release year:: | ||||
|  | ||||
| @@ -1067,11 +1063,6 @@ calling the appropriate methods on the wrapped expression. | ||||
|         ``nulls_first`` and ``nulls_last`` define how null values are sorted. | ||||
|         See :ref:`using-f-to-sort-null-values` for example usage. | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             In older versions, ``nulls_first`` and ``nulls_last`` defaulted to | ||||
|             ``False``. | ||||
|  | ||||
|         .. deprecated:: 4.1 | ||||
|  | ||||
|             Passing ``nulls_first=False`` or ``nulls_last=False`` to ``asc()`` | ||||
| @@ -1084,11 +1075,6 @@ calling the appropriate methods on the wrapped expression. | ||||
|         ``nulls_first`` and ``nulls_last`` define how null values are sorted. | ||||
|         See :ref:`using-f-to-sort-null-values` for example usage. | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             In older versions, ``nulls_first`` and ``nulls_last`` defaulted to | ||||
|             ``False``. | ||||
|  | ||||
|         .. deprecated:: 4.1 | ||||
|  | ||||
|             Passing ``nulls_first=False`` or ``nulls_last=False`` to ``desc()`` | ||||
|   | ||||
| @@ -219,8 +219,4 @@ See the PostgreSQL documentation for more details about `covering indexes`_. | ||||
|     covering :class:`SP-GiST indexes | ||||
|     <django.contrib.postgres.indexes.SpGistIndex>`. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for covering SP-GiST indexes with PostgreSQL 14+ was added. | ||||
|  | ||||
| .. _covering indexes: https://www.postgresql.org/docs/current/indexes-index-only-scans.html | ||||
|   | ||||
| @@ -229,11 +229,6 @@ validation errors yourself, or if you have excluded fields from the | ||||
|     ``django.db.models`` logger, like *"Got a database error calling check() on | ||||
|     …"* to confirm it's validated properly. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, constraints were not checked during the model | ||||
|     validation. | ||||
|  | ||||
| .. method:: Model.full_clean(exclude=None, validate_unique=True, validate_constraints=True) | ||||
|  | ||||
| This method calls :meth:`Model.clean_fields()`, :meth:`Model.clean()`, | ||||
| @@ -263,14 +258,6 @@ models. For example:: | ||||
|  | ||||
| The first step ``full_clean()`` performs is to clean each individual field. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``validate_constraints`` argument was added. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     An ``exclude`` value is now converted to a ``set`` rather than a ``list``. | ||||
|  | ||||
| .. method:: Model.clean_fields(exclude=None) | ||||
|  | ||||
| This method will validate all fields on your model. The optional ``exclude`` | ||||
| @@ -391,15 +378,8 @@ the fields you provided will not be checked. | ||||
|  | ||||
| Finally, ``full_clean()`` will check any other constraints on your model. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, :class:`~django.db.models.UniqueConstraint`\s were | ||||
|     validated by ``validate_unique()``. | ||||
|  | ||||
| .. method:: Model.validate_constraints(exclude=None) | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| This method validates all constraints defined in | ||||
| :attr:`Meta.constraints <django.db.models.Options.constraints>`. The | ||||
| optional ``exclude`` argument allows you to provide a ``set`` of field names to | ||||
|   | ||||
| @@ -43,10 +43,6 @@ You can evaluate a ``QuerySet`` in the following ways: | ||||
|   Both synchronous and asynchronous iterators of QuerySets share the same | ||||
|   underlying cache. | ||||
|  | ||||
|   .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for asynchronous iteration was added. | ||||
|  | ||||
| * **Slicing.** As explained in :ref:`limiting-querysets`, a ``QuerySet`` can | ||||
|   be sliced, using Python's array-slicing syntax. Slicing an unevaluated | ||||
|   ``QuerySet`` usually returns another unevaluated ``QuerySet``, but Django | ||||
| @@ -1250,10 +1246,8 @@ could be generated, which, depending on the database, might have performance | ||||
| problems of its own when it comes to parsing or executing the SQL query. Always | ||||
| profile for your use case! | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     If you use ``iterator()`` to run the query, ``prefetch_related()`` | ||||
|     calls will only be observed if a value for ``chunk_size`` is provided. | ||||
| If you use ``iterator()`` to run the query, ``prefetch_related()`` calls will | ||||
| only be observed if a value for ``chunk_size`` is provided. | ||||
|  | ||||
| You can use the :class:`~django.db.models.Prefetch` object to further control | ||||
| the prefetch operation. | ||||
| @@ -1955,8 +1949,6 @@ may be generated. | ||||
| XOR (``^``) | ||||
| ~~~~~~~~~~~ | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Combines two ``QuerySet``\s using the SQL ``XOR`` operator. | ||||
|  | ||||
| The following are equivalent:: | ||||
| @@ -2003,10 +1995,6 @@ this reason, each has a corresponding asynchronous version with an ``a`` prefix | ||||
| There is usually no difference in behavior apart from their asynchronous | ||||
| nature, but any differences are noted below next to each method. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The asynchronous versions of each method, prefixed with ``a`` was added. | ||||
|  | ||||
| ``get()`` | ||||
| ~~~~~~~~~ | ||||
|  | ||||
| @@ -2053,10 +2041,6 @@ can use :exc:`django.core.exceptions.ObjectDoesNotExist`  to handle | ||||
|     except ObjectDoesNotExist: | ||||
|         print("Either the blog or entry doesn't exist.") | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aget()`` method was added. | ||||
|  | ||||
| ``create()`` | ||||
| ~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2084,10 +2068,6 @@ database, a call to ``create()`` will fail with an | ||||
| :exc:`~django.db.IntegrityError` since primary keys must be unique. Be | ||||
| prepared to handle the exception if you are using manual primary keys. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``acreate()`` method was added. | ||||
|  | ||||
| ``get_or_create()`` | ||||
| ~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2216,10 +2196,6 @@ whenever a request to a page has a side effect on your data. For more, see | ||||
|   chapter because it isn't related to that book, but it can't create it either | ||||
|   because ``title`` field should be unique. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aget_or_create()`` method was added. | ||||
|  | ||||
| ``update_or_create()`` | ||||
| ~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2273,10 +2249,6 @@ Like :meth:`get_or_create` and :meth:`create`, if you're using manually | ||||
| specified primary keys and an object needs to be created but the key already | ||||
| exists in the database, an :exc:`~django.db.IntegrityError` is raised. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aupdate_or_create()`` method was added. | ||||
|  | ||||
| .. versionchanged:: 4.2 | ||||
|  | ||||
|     In older versions, ``update_or_create()`` didn't specify ``update_fields`` | ||||
| @@ -2354,14 +2326,6 @@ support it). | ||||
| .. _MySQL documentation: https://dev.mysql.com/doc/refman/en/sql-mode.html#ignore-strict-comparison | ||||
| .. _MariaDB documentation: https://mariadb.com/kb/en/ignore/ | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``update_conflicts``, ``update_fields``, and ``unique_fields`` | ||||
|     parameters were added to support updating fields when a row insertion fails | ||||
|     on conflict. | ||||
|  | ||||
|     ``abulk_create()`` method was added. | ||||
|  | ||||
| ``bulk_update()`` | ||||
| ~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2407,10 +2371,6 @@ The ``batch_size`` parameter controls how many objects are saved in a single | ||||
| query. The default is to update all objects in one batch, except for SQLite | ||||
| and Oracle which have restrictions on the number of variables used in a query. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``abulk_update()`` method was added. | ||||
|  | ||||
| ``count()`` | ||||
| ~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2443,10 +2403,6 @@ database query like ``count()`` would. | ||||
| If the queryset has already been fully retrieved, ``count()`` will use that | ||||
| length rather than perform an extra database query. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``acount()`` method was added. | ||||
|  | ||||
| ``in_bulk()`` | ||||
| ~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2482,10 +2438,6 @@ Example:: | ||||
|  | ||||
| If you pass ``in_bulk()`` an empty list, you'll get an empty dictionary. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``ain_bulk()`` method was added. | ||||
|  | ||||
| ``iterator()`` | ||||
| ~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2532,12 +2484,6 @@ value for ``chunk_size`` will result in Django using an implicit default of | ||||
| Depending on the database backend, query results will either be loaded all at | ||||
| once or streamed from the database using server-side cursors. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for prefetching related objects was added to ``iterator()``. | ||||
|  | ||||
|     ``aiterator()`` method was added. | ||||
|  | ||||
| .. deprecated:: 4.1 | ||||
|  | ||||
|     Using ``iterator()`` on a queryset that prefetches related objects without | ||||
| @@ -2640,10 +2586,6 @@ readability. | ||||
|  | ||||
|         Entry.objects.filter(pub_date__isnull=False).latest('pub_date') | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``alatest()`` method was added. | ||||
|  | ||||
| ``earliest()`` | ||||
| ~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2655,10 +2597,6 @@ readability. | ||||
| Works otherwise like :meth:`~django.db.models.query.QuerySet.latest` except | ||||
| the direction is changed. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aearliest()`` method was added. | ||||
|  | ||||
| ``first()`` | ||||
| ~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2684,10 +2622,6 @@ equivalent to the above example:: | ||||
|     except IndexError: | ||||
|         p = None | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``afirst()`` method was added. | ||||
|  | ||||
| ``last()`` | ||||
| ~~~~~~~~~~ | ||||
|  | ||||
| @@ -2698,10 +2632,6 @@ equivalent to the above example:: | ||||
|  | ||||
| Works like  :meth:`first()`, but returns the last object in the queryset. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``alast()`` method was added. | ||||
|  | ||||
| ``aggregate()`` | ||||
| ~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2741,10 +2671,6 @@ control the name of the aggregation value that is returned:: | ||||
| For an in-depth discussion of aggregation, see :doc:`the topic guide on | ||||
| Aggregation </topics/db/aggregation>`. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aaggregate()`` method was added. | ||||
|  | ||||
| ``exists()`` | ||||
| ~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2781,10 +2707,6 @@ more overall work (one query for the existence check plus an extra one to later | ||||
| retrieve the results) than using ``bool(some_queryset)``, which retrieves the | ||||
| results and then checks if any were returned. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aexists()`` method was added. | ||||
|  | ||||
| ``contains()`` | ||||
| ~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2815,10 +2737,6 @@ know that it will be at some point, then using ``some_queryset.contains(obj)`` | ||||
| will make an additional database query, generally resulting in slower overall | ||||
| performance. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``acontains()`` method was added. | ||||
|  | ||||
| ``update()`` | ||||
| ~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -2896,10 +2814,6 @@ update a bunch of records for a model that has a custom | ||||
|         e.comments_on = False | ||||
|         e.save() | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aupdate()`` method was added. | ||||
|  | ||||
| Ordered queryset | ||||
| ^^^^^^^^^^^^^^^^ | ||||
|  | ||||
| @@ -2971,10 +2885,6 @@ ForeignKeys which are set to :attr:`~django.db.models.ForeignKey.on_delete` | ||||
| Note that the queries generated in object deletion is an implementation | ||||
| detail subject to change. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``adelete()`` method was added. | ||||
|  | ||||
| ``as_manager()`` | ||||
| ~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| @@ -3033,10 +2943,6 @@ adverse effects on your database. For example, the ``ANALYZE`` flag supported | ||||
| by MariaDB, MySQL 8.0.18+, and PostgreSQL could result in changes to data if | ||||
| there are triggers or if a function is called, even for a ``SELECT`` query. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     ``aexplain()`` method was added. | ||||
|  | ||||
| .. _field-lookups: | ||||
|  | ||||
| ``Field`` lookups | ||||
| @@ -3982,10 +3888,6 @@ or annotation. They make it possible to define and reuse conditions, and | ||||
| combine them using operators such as ``|`` (``OR``), ``&`` (``AND``), and ``^`` | ||||
| (``XOR``). See :ref:`complex-lookups-with-q`. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for the ``^`` (``XOR``) operator was added. | ||||
|  | ||||
| ``Prefetch()`` objects | ||||
| ---------------------- | ||||
|  | ||||
|   | ||||
| @@ -120,10 +120,6 @@ Related objects reference | ||||
|         needed. You can use callables as values in the ``through_defaults`` | ||||
|         dictionary. | ||||
|  | ||||
|         .. versionchanged:: 4.1 | ||||
|  | ||||
|             ``acreate()`` method was added. | ||||
|  | ||||
|     .. method:: remove(*objs, bulk=True) | ||||
|     .. method:: aremove(*objs, bulk=True) | ||||
|  | ||||
|   | ||||
| @@ -857,11 +857,6 @@ Methods | ||||
|       number of seconds, or ``None`` (default) if the cookie should last only | ||||
|       as long as the client's browser session. If ``expires`` is not specified, | ||||
|       it will be calculated. | ||||
|  | ||||
|       .. versionchanged:: 4.1 | ||||
|  | ||||
|         Support for ``timedelta`` objects was added. | ||||
|  | ||||
|     * ``expires`` should either be a string in the format | ||||
|       ``"Wdy, DD-Mon-YY HH:MM:SS GMT"`` or a ``datetime.datetime`` object | ||||
|       in UTC. If ``expires`` is a ``datetime`` object, the ``max_age`` | ||||
|   | ||||
| @@ -82,8 +82,6 @@ Removes ``index`` from ``model``’s table. | ||||
| ``rename_index()`` | ||||
| ------------------ | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. method:: BaseDatabaseSchemaEditor.rename_index(model, old_index, new_index) | ||||
|  | ||||
| Renames ``old_index`` from ``model``’s table to ``new_index``. | ||||
|   | ||||
| @@ -348,8 +348,6 @@ See :setting:`SESSION_COOKIE_HTTPONLY` for details on ``HttpOnly``. | ||||
| ``CSRF_COOKIE_MASKED`` | ||||
| ---------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Default: ``False`` | ||||
|  | ||||
| Whether to mask the CSRF cookie. See | ||||
| @@ -625,8 +623,6 @@ behavior — and ``None`` for unlimited :ref:`persistent database connections | ||||
| ``CONN_HEALTH_CHECKS`` | ||||
| ~~~~~~~~~~~~~~~~~~~~~~ | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Default: ``False`` | ||||
|  | ||||
| If set to ``True``, existing :ref:`persistent database connections | ||||
| @@ -2311,8 +2307,6 @@ passwords of users and key rotation will not affect them. | ||||
| ``SECRET_KEY_FALLBACKS`` | ||||
| ------------------------ | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Default: ``[]`` | ||||
|  | ||||
| A list of fallback secret keys for a particular Django installation. These are | ||||
| @@ -2444,11 +2438,6 @@ in via HTTPS) when: | ||||
| * its initial, leftmost value is ``'https'`` in the case of a comma-separated | ||||
|   list of protocols (e.g. ``'https,http,http'``). | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for a comma-separated list of protocols in the header value was | ||||
|     added. | ||||
|  | ||||
| You should *only* set this setting if you control your proxy or have some other | ||||
| guarantee that it sets/strips this header appropriately. | ||||
|  | ||||
|   | ||||
| @@ -204,7 +204,6 @@ Arguments sent with this signal: | ||||
|     The database alias being used. | ||||
|  | ||||
| ``origin`` | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     The origin of the deletion being the instance of a ``Model`` or | ||||
|     ``QuerySet`` class. | ||||
| @@ -234,7 +233,6 @@ Arguments sent with this signal: | ||||
|     The database alias being used. | ||||
|  | ||||
| ``origin`` | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     The origin of the deletion being the instance of a ``Model`` or | ||||
|     ``QuerySet`` class. | ||||
|   | ||||
| @@ -102,11 +102,6 @@ overridden by what's passed by | ||||
|       These loaders are then wrapped in | ||||
|       :class:`django.template.loaders.cached.Loader`. | ||||
|  | ||||
|       .. versionchanged:: 4.1 | ||||
|  | ||||
|         In older versions, the cached template loader was only enabled by | ||||
|         default when ``DEBUG`` was ``False``. | ||||
|  | ||||
|       See :ref:`template-loaders` for details. | ||||
|  | ||||
|     * ``string_if_invalid`` is the output, as a string, that the template | ||||
| @@ -949,12 +944,6 @@ loaders that come with Django: | ||||
|         information, see :ref:`template tag thread safety considerations | ||||
|         <template_tag_thread_safety>`. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The cached template loader was enabled whenever ``OPTIONS['loaders']`` | ||||
|         is not specified. Previously it was only enabled when ``DEBUG`` was | ||||
|         ``False``. | ||||
|  | ||||
| ``django.template.loaders.locmem.Loader`` | ||||
|  | ||||
| .. class:: locmem.Loader | ||||
|   | ||||
| @@ -1867,10 +1867,6 @@ This is compatible with a strict Content Security Policy that prohibits in-page | ||||
| script execution. It also maintains a clean separation between passive data and | ||||
| executable code. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the HTML "id" was a required argument. | ||||
|  | ||||
| .. templatefilter:: last | ||||
|  | ||||
| ``last`` | ||||
|   | ||||
| @@ -129,15 +129,11 @@ If the URL does not resolve, the function raises a | ||||
|  | ||||
|     .. attribute:: ResolverMatch.captured_kwargs | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         The captured keyword arguments that would be passed to the view | ||||
|         function, as parsed from the URL. | ||||
|  | ||||
|     .. attribute:: ResolverMatch.extra_kwargs | ||||
|  | ||||
|         .. versionadded:: 4.1 | ||||
|  | ||||
|         The additional keyword arguments that would be passed to the view | ||||
|         function. | ||||
|  | ||||
|   | ||||
| @@ -670,10 +670,6 @@ escaping HTML. | ||||
|     serialize the data. See :ref:`JSON serialization | ||||
|     <serialization-formats-json>` for more details about this serializer. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         In older versions, the ``element_id`` argument was required. | ||||
|  | ||||
|     .. versionchanged:: 4.2 | ||||
|  | ||||
|         The ``encoder`` argument was added. | ||||
|   | ||||
| @@ -337,8 +337,6 @@ to, or in lieu of custom ``field.clean()`` methods. | ||||
| ``StepValueValidator`` | ||||
| ---------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| .. class:: StepValueValidator(limit_value, message=None) | ||||
|  | ||||
|     Raises a :exc:`~django.core.exceptions.ValidationError` with a code of | ||||
|   | ||||
| @@ -76,8 +76,6 @@ corruption. | ||||
| Queries & the ORM | ||||
| ----------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| With some exceptions, Django can run ORM queries asynchronously as well:: | ||||
|  | ||||
|     async for author in Author.objects.filter(name__startswith="A"): | ||||
|   | ||||
| @@ -134,8 +134,6 @@ information, the client may or may not download the full object list. | ||||
| Asynchronous class-based views | ||||
| ============================== | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| As well as the synchronous (``def``) method handlers already shown, ``View`` | ||||
| subclasses may define asynchronous (``async def``) method handlers to leverage | ||||
| asynchronous code using ``await``:: | ||||
|   | ||||
| @@ -857,8 +857,6 @@ being evaluated and therefore populate the cache:: | ||||
| Asynchronous queries | ||||
| ==================== | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| If you are writing asynchronous views or code, you cannot use the ORM for | ||||
| queries in quite the way we have described above, as you cannot call *blocking* | ||||
| synchronous code from asynchronous code - it will block up the event loop | ||||
| @@ -873,8 +871,6 @@ results, you can use asynchronous iteration (``async for``) instead. | ||||
| Query iteration | ||||
| --------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| The default way of iterating over a query - with ``for`` - will result in a | ||||
| blocking database query behind the scenes as Django loads the results at | ||||
| iteration time. To fix this, you can swap to ``async for``:: | ||||
| @@ -895,8 +891,6 @@ read the next section. | ||||
| ``QuerySet`` and manager methods | ||||
| -------------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Some methods on managers and querysets - like ``get()`` and ``first()`` - force | ||||
| execution of the queryset and are blocking. Some, like ``filter()`` and | ||||
| ``exclude()``, don't force execution and so are safe to run from asynchronous | ||||
| @@ -938,8 +932,6 @@ the whole expression in order to call it in an asynchronous-friendly way. | ||||
| Transactions | ||||
| ------------ | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Transactions are **not** currently supported with asynchronous queries and | ||||
| updates. You will find that trying to use one raises | ||||
| ``SynchronousOnlyOperation``. | ||||
| @@ -1319,10 +1311,6 @@ precede the definition of any keyword arguments. For example:: | ||||
|     The :source:`OR lookups examples <tests/or_lookups/tests.py>` in Django's | ||||
|     unit tests show some possible uses of ``Q``. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     Support for the ``^`` (``XOR``) operator was added. | ||||
|  | ||||
| Comparing objects | ||||
| ================= | ||||
|  | ||||
|   | ||||
| @@ -238,11 +238,6 @@ Django provides a single API to control database transactions. | ||||
|     is especially important if you're using :func:`atomic` in long-running | ||||
|     processes, outside of Django's request / response cycle. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the durability check was disabled in | ||||
|     :class:`django.test.TestCase`. | ||||
|  | ||||
| Autocommit | ||||
| ========== | ||||
|  | ||||
|   | ||||
| @@ -317,10 +317,6 @@ And here is a custom error message:: | ||||
|     >>> formset.non_form_errors() | ||||
|     ['Sorry, something went wrong.'] | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``'too_few_forms'`` and ``'too_many_forms'`` keys were added. | ||||
|  | ||||
| Custom formset validation | ||||
| ------------------------- | ||||
|  | ||||
| @@ -804,16 +800,8 @@ Formsets have the following attributes and methods associated with rendering: | ||||
|     then each form in the formset as per the template defined by the form's | ||||
|     :attr:`~django.forms.Form.template_name`. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         In older versions ``template_name`` defaulted to the string value | ||||
|         ``'django/forms/formset/default.html'``. | ||||
|  | ||||
|  | ||||
| .. attribute:: BaseFormSet.template_name_div | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     The name of the template used when calling :meth:`.as_div`. By default this | ||||
|     is ``"django/forms/formsets/div.html"``. This template renders the | ||||
|     formset's management form and then each form in the formset as per the | ||||
|   | ||||
| @@ -552,11 +552,6 @@ the :meth:`.Form.render`. Here's an example of this being used in a view:: | ||||
|  | ||||
| See :ref:`ref-forms-api-outputting-html` for more details. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ability to set the default ``form_template_name`` on the form renderer | ||||
|     was added. | ||||
|  | ||||
| Form rendering options | ||||
| ---------------------- | ||||
|  | ||||
| @@ -754,15 +749,11 @@ Useful attributes on ``{{ field }}`` include: | ||||
|  | ||||
| ``{{ field.legend_tag }}`` | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     Similar to ``field.label_tag`` but uses a ``<legend>`` tag in place of | ||||
|     ``<label>``, for widgets with multiple inputs wrapped in a ``<fieldset>``. | ||||
|  | ||||
| ``{{ field.use_fieldset }}`` | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     This attribute is ``True`` if the form field's widget contains multiple | ||||
|     inputs that should be semantically grouped in a ``<fieldset>`` with a | ||||
|     ``<legend>`` to improve accessibility. An example use in a template: | ||||
|   | ||||
| @@ -118,11 +118,6 @@ If this last CSS definition were to be rendered, it would become the following H | ||||
|     <link href="http://static.example.com/lo_res.css" media="tv,projector" rel="stylesheet"> | ||||
|     <link href="http://static.example.com/newspaper.css" media="print" rel="stylesheet"> | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the ``type="text/css"`` attribute is included in CSS | ||||
|     links. | ||||
|  | ||||
| ``js`` | ||||
| ------ | ||||
|  | ||||
| @@ -260,8 +255,6 @@ Or if :mod:`~django.contrib.staticfiles` is configured using the | ||||
| Paths as objects | ||||
| ---------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Asset paths may also be given as hashable objects implementing an | ||||
| ``__html__()`` method. The ``__html__()`` method is typically added using the | ||||
| :func:`~django.utils.html.html_safe` decorator. The object is responsible for | ||||
|   | ||||
| @@ -995,8 +995,6 @@ of forms displayed (1000). In practice this is equivalent to no limit. | ||||
| Preventing new objects creation | ||||
| ------------------------------- | ||||
|  | ||||
| .. versionadded:: 4.1 | ||||
|  | ||||
| Using the ``edit_only`` parameter, you can prevent creation of any new | ||||
| objects:: | ||||
|  | ||||
|   | ||||
| @@ -712,8 +712,6 @@ You must then transition the squashed migration to a normal migration by: | ||||
|  | ||||
| .. admonition:: Pruning references to deleted migrations | ||||
|  | ||||
|     .. versionadded:: 4.1 | ||||
|  | ||||
|     If it is likely that you may reuse the name of a deleted migration in the | ||||
|     future, you should remove references to it from Django’s migrations table | ||||
|     with the :option:`migrate --prune` option. | ||||
|   | ||||
| @@ -38,10 +38,6 @@ generate their own signed values. | ||||
| values will not be used to sign data, but if specified, they will be used to | ||||
| validate signed data and must be kept secure. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     The ``SECRET_KEY_FALLBACKS`` setting was added. | ||||
|  | ||||
| Using the low-level API | ||||
| ======================= | ||||
|  | ||||
| @@ -111,10 +107,6 @@ generate signatures. You can use a different secret by passing it to the | ||||
|     of additional values used to validate signed data, defaults to | ||||
|     :setting:`SECRET_KEY_FALLBACKS`. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``fallback_keys`` argument was added. | ||||
|  | ||||
|     .. deprecated:: 4.2 | ||||
|  | ||||
|         Support for passing positional arguments is deprecated. | ||||
| @@ -247,7 +239,3 @@ and tuples) if you pass in a tuple, you will get a list from | ||||
|  | ||||
|     Reverse of ``dumps()``, raises ``BadSignature`` if signature fails. | ||||
|     Checks ``max_age`` (in seconds) if given. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         The ``fallback_keys`` argument was added. | ||||
|   | ||||
| @@ -331,10 +331,6 @@ or an unexpected success). If all the tests pass, the return code is 0. This | ||||
| feature is useful if you're using the test-runner script in a shell script and | ||||
| need to test for success or failure at that level. | ||||
|  | ||||
| .. versionchanged:: 4.1 | ||||
|  | ||||
|     In older versions, the return code was 0 for unexpected successes. | ||||
|  | ||||
| .. _speeding-up-tests-auth-hashers: | ||||
|  | ||||
| Speeding up the tests | ||||
|   | ||||
| @@ -1601,19 +1601,6 @@ your test suite. | ||||
|     which means that ``errors='error message'`` is the same as | ||||
|     ``errors=['error message']``. | ||||
|  | ||||
|     .. versionchanged:: 4.1 | ||||
|  | ||||
|         In older versions, using an empty error list with ``assertFormError()`` | ||||
|         would always pass, regardless of whether the field had any errors or | ||||
|         not. Starting from Django 4.1, using ``errors=[]`` will only pass if | ||||
|         the field actually has no errors. | ||||
|  | ||||
|         Django 4.1 also changed the behavior of ``assertFormError()`` when a | ||||
|         field has multiple errors. In older versions, if a field had multiple | ||||
|         errors and you checked for only some of them, the test would pass. | ||||
|         Starting from Django 4.1, the error list must be an exact match to the | ||||
|         field's actual errors. | ||||
|  | ||||
|     .. deprecated:: 4.1 | ||||
|  | ||||
|         Support for passing a response object and a form name to | ||||
|   | ||||
		Reference in New Issue
	
	Block a user