mirror of
https://github.com/django/django.git
synced 2025-07-24 05:36:15 +00:00
Fixed #26230 -- Made default_related_name affect related_query_name.
This commit is contained in:
parent
5fb9756eba
commit
b84f5ab4ec
8 changed files with 97 additions and 8 deletions
|
@ -138,6 +138,9 @@ details on these changes.
|
|||
* Support for the ``django.core.files.storage.Storage.accessed_time()``,
|
||||
``created_time()``, and ``modified_time()`` methods will be removed.
|
||||
|
||||
* Support for query lookups using the model name when
|
||||
``Meta.default_related_name`` is set will be removed.
|
||||
|
||||
.. _deprecation-removed-in-1.10:
|
||||
|
||||
1.10
|
||||
|
|
|
@ -1333,8 +1333,9 @@ The possible values for :attr:`~ForeignKey.on_delete` are found in
|
|||
|
||||
.. attribute:: ForeignKey.related_query_name
|
||||
|
||||
The name to use for the reverse filter name from the target model.
|
||||
Defaults to the value of :attr:`related_name` if it is set, otherwise it
|
||||
The name to use for the reverse filter name from the target model. It
|
||||
defaults to the value of :attr:`related_name` or
|
||||
:attr:`~django.db.models.Options.default_related_name` if set, otherwise it
|
||||
defaults to the name of the model::
|
||||
|
||||
# Declare the ForeignKey with related_query_name
|
||||
|
|
|
@ -103,6 +103,8 @@ Django quotes column and table names behind the scenes.
|
|||
The name that will be used by default for the relation from a related object
|
||||
back to this one. The default is ``<model_name>_set``.
|
||||
|
||||
This option also sets :attr:`~ForeignKey.related_query_name`.
|
||||
|
||||
As the reverse name for a field should be unique, be careful if you intend
|
||||
to subclass your model. To work around name collisions, part of the name
|
||||
should contain ``'%(app_label)s'`` and ``'%(model_name)s'``, which are
|
||||
|
@ -110,6 +112,30 @@ Django quotes column and table names behind the scenes.
|
|||
and the name of the model, both lowercased. See the paragraph on
|
||||
:ref:`related names for abstract models <abstract-related-name>`.
|
||||
|
||||
.. deprecated:: 1.10
|
||||
|
||||
This attribute now affects ``related_query_name``. The old query lookup
|
||||
name is deprecated::
|
||||
|
||||
from django.db import models
|
||||
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
|
||||
class Bar(models.Model):
|
||||
foo = models.ForeignKey(Foo)
|
||||
|
||||
class Meta:
|
||||
default_related_name = 'bars'
|
||||
|
||||
::
|
||||
|
||||
>>> bar = Bar.objects.get(pk=1)
|
||||
>>> # Using model name "bar" as lookup string is deprecated.
|
||||
>>> Foo.object.get(bar=bar)
|
||||
>>> # You should use default_related_name "bars".
|
||||
>>> Foo.object.get(bars=bar)
|
||||
|
||||
``get_latest_by``
|
||||
-----------------
|
||||
|
||||
|
|
|
@ -704,6 +704,34 @@ longer than the 4000 byte limit of ``NVARCHAR2``, you should use ``TextField``
|
|||
field (e.g. annotating the model with an aggregation or using ``distinct()``)
|
||||
you'll need to change them (to defer the field).
|
||||
|
||||
Using a model name as a query lookup when ``default_related_name`` is set
|
||||
-------------------------------------------------------------------------
|
||||
|
||||
Assume the following models::
|
||||
|
||||
from django.db import models
|
||||
|
||||
class Foo(models.Model):
|
||||
pass
|
||||
|
||||
class Bar(models.Model):
|
||||
foo = models.ForeignKey(Foo)
|
||||
|
||||
class Meta:
|
||||
default_related_name = 'bars'
|
||||
|
||||
In older versions, :attr:`~django.db.models.Options.default_related_name`
|
||||
couldn't be used as a query lookup. This is fixed and support for the old
|
||||
lookup name is deprecated. For example, since ``default_related_name`` is set
|
||||
in model ``Bar``, instead of using the model name ``bar`` as the lookup::
|
||||
|
||||
>>> bar = Bar.objects.get(pk=1)
|
||||
>>> Foo.object.get(bar=bar)
|
||||
|
||||
use the default_related_name ``bars``::
|
||||
|
||||
>>> Foo.object.get(bars=bar)
|
||||
|
||||
Miscellaneous
|
||||
-------------
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue