summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJames Pulec <jpulec@gmail.com>2015-09-29 10:52:26 -0700
committerTim Graham <timograham@gmail.com>2016-01-28 11:10:47 -0500
commitf05722a08a11b2e6c6c9acdf2bacd6a6128ccbb0 (patch)
treefabf7b0a182135926414d6608239d334292c61e9 /docs
parent5453aa66cfdf228f40dc1997d811ca986de405a3 (diff)
Fixed #25354 -- Added class/app_label interpolation for related_query_name.
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/models/fields.txt3
-rw-r--r--docs/releases/1.10.txt4
-rw-r--r--docs/topics/db/models.txt51
3 files changed, 41 insertions, 17 deletions
diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt
index 0a33e96122..28c93bf60c 100644
--- a/docs/ref/models/fields.txt
+++ b/docs/ref/models/fields.txt
@@ -1344,6 +1344,9 @@ The possible values for :attr:`~ForeignKey.on_delete` are found in
# That's now the name of the reverse filter
Article.objects.filter(tag__name="important")
+ Like :attr:`related_name`, ``related_query_name`` supports app label and
+ class interpolation via :ref:`some special syntax <abstract-related-name>`.
+
.. attribute:: ForeignKey.to_field
The field on the related object that the relation is to. By default, Django
diff --git a/docs/releases/1.10.txt b/docs/releases/1.10.txt
index bab0f900bf..1f9cc69453 100644
--- a/docs/releases/1.10.txt
+++ b/docs/releases/1.10.txt
@@ -268,6 +268,10 @@ Models
* :meth:`QuerySet.in_bulk() <django.db.models.query.QuerySet.in_bulk>`
may be called without any arguments to return all objects in the queryset.
+* :attr:`~django.db.models.ForeignKey.related_query_name` now supports
+ app label and class interpolation using the ``'%(app_label)s'`` and
+ ``'%(class)s'`` strings.
+
Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/topics/db/models.txt b/docs/topics/db/models.txt
index 08ea426690..05b8bfcad9 100644
--- a/docs/topics/db/models.txt
+++ b/docs/topics/db/models.txt
@@ -967,18 +967,23 @@ the same database table, which is almost certainly not what you want.
.. _abstract-related-name:
-Be careful with ``related_name``
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Be careful with ``related_name`` and ``related_query_name``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you are using the :attr:`~django.db.models.ForeignKey.related_name` attribute on a ``ForeignKey`` or
-``ManyToManyField``, you must always specify a *unique* reverse name for the
-field. This would normally cause a problem in abstract base classes, since the
-fields on this class are included into each of the child classes, with exactly
-the same values for the attributes (including :attr:`~django.db.models.ForeignKey.related_name`) each time.
+If you are using :attr:`~django.db.models.ForeignKey.related_name` or
+:attr:`~django.db.models.ForeignKey.related_query_name` on a ``ForeignKey`` or
+``ManyToManyField``, you must always specify a *unique* reverse name and query
+name for the field. This would normally cause a problem in abstract base
+classes, since the fields on this class are included into each of the child
+classes, with exactly the same values for the attributes (including
+:attr:`~django.db.models.ForeignKey.related_name` and
+:attr:`~django.db.models.ForeignKey.related_query_name`) each time.
-To work around this problem, when you are using :attr:`~django.db.models.ForeignKey.related_name` in an
-abstract base class (only), part of the name should contain
-``'%(app_label)s'`` and ``'%(class)s'``.
+To work around this problem, when you are using
+:attr:`~django.db.models.ForeignKey.related_name` or
+:attr:`~django.db.models.ForeignKey.related_query_name` in an abstract base
+class (only), part of the value should contain ``'%(app_label)s'`` and
+``'%(class)s'``.
- ``'%(class)s'`` is replaced by the lower-cased name of the child class
that the field is used in.
@@ -992,7 +997,11 @@ For example, given an app ``common/models.py``::
from django.db import models
class Base(models.Model):
- m2m = models.ManyToManyField(OtherModel, related_name="%(app_label)s_%(class)s_related")
+ m2m = models.ManyToManyField(
+ OtherModel,
+ related_name="%(app_label)s_%(class)s_related",
+ related_query_name="%(app_label)s_%(class)ss",
+ )
class Meta:
abstract = True
@@ -1011,12 +1020,15 @@ Along with another app ``rare/models.py``::
pass
The reverse name of the ``common.ChildA.m2m`` field will be
-``common_childa_related``, while the reverse name of the
-``common.ChildB.m2m`` field will be ``common_childb_related``, and finally the
-reverse name of the ``rare.ChildB.m2m`` field will be ``rare_childb_related``.
-It is up to you how you use the ``'%(class)s'`` and ``'%(app_label)s`` portion
-to construct your related name, but if you forget to use it, Django will raise
-errors when you perform system checks (or run :djadmin:`migrate`).
+``common_childa_related`` and the reverse query name will be ``common_childas``.
+The reverse name of the ``common.ChildB.m2m`` field will be
+``common_childb_related`` and the reverse query name will be
+``common_childbs``. Finally, the reverse name of the ``rare.ChildB.m2m`` field
+will be ``rare_childb_related`` and the reverse query name will be
+``rare_childbs``. It's up to you how you use the `'%(class)s'`` and
+``'%(app_label)s`` portion to construct your related name or related query name
+but if you forget to use it, Django will raise errors when you perform system
+checks (or run :djadmin:`migrate`).
If you don't specify a :attr:`~django.db.models.ForeignKey.related_name`
attribute for a field in an abstract base class, the default reverse name will
@@ -1027,6 +1039,11 @@ attribute was omitted, the reverse name for the ``m2m`` field would be
``childa_set`` in the ``ChildA`` case and ``childb_set`` for the ``ChildB``
field.
+.. versionchanged:: 1.10
+
+ Interpolation of ``'%(app_label)s'`` and ``'%(class)s'`` for
+ ``related_query_name`` was added.
+
.. _multi-table-inheritance:
Multi-table inheritance