Fixed #26706 -- Made RelatedManager modification methods clear prefetch_related() cache.

This commit is contained in:
Yoong Kang Lim 2016-06-05 22:15:00 +10:00 committed by Tim Graham
parent ea65c7cb48
commit d30febb4e5
7 changed files with 124 additions and 2 deletions

View file

@ -979,6 +979,18 @@ database.
performance, since you have done a database query that you haven't used. So
use this feature with caution!
Also, if you call the database-altering methods
:meth:`~django.db.models.fields.related.RelatedManager.add`,
:meth:`~django.db.models.fields.related.RelatedManager.remove`,
:meth:`~django.db.models.fields.related.RelatedManager.clear` or
:meth:`~django.db.models.fields.related.RelatedManager.set`, on
:class:`related managers<django.db.models.fields.related.RelatedManager>`,
any prefetched cache for the relation will be cleared.
.. versionchanged:: 1.11
The clearing of the prefetched cache described above was added.
You can also use the normal join syntax to do related fields of related
fields. Suppose we have an additional model to the example above::

View file

@ -170,6 +170,14 @@ Related objects reference
``add()``, ``create()``, ``remove()``, and ``set()`` methods are
disabled.
If you use :meth:`~django.db.models.query.QuerySet.prefetch_related`,
the ``add()``, ``remove()``, ``clear()``, and ``set()`` methods clear
the prefetched cache.
.. versionchanged:: 1.11
The clearing of the prefetched cache described above was added.
Direct Assignment
=================

View file

@ -357,6 +357,13 @@ Miscellaneous
* The ``checked`` attribute rendered by form widgets now uses HTML5 boolean
syntax rather than XHTML's ``checked='checked'``.
* :meth:`RelatedManager.add()
<django.db.models.fields.related.RelatedManager.add>`,
:meth:`~django.db.models.fields.related.RelatedManager.remove`,
:meth:`~django.db.models.fields.related.RelatedManager.clear`, and
:meth:`~django.db.models.fields.related.RelatedManager.set` now
clear the ``prefetch_related()`` cache.
.. _deprecated-features-1.11:
Features deprecated in 1.11