[1.6.x] Fixed #23282 -- Corrected inheritance and reverse relations example.

Thanks knowledgepoint-devs for the report and claudep for review.

Backport of 7006187064 from master
This commit is contained in:
Tim Graham 2014-08-19 06:27:27 -04:00
parent 190d81179f
commit d1e4fb996b
1 changed files with 15 additions and 7 deletions

View File

@ -1044,19 +1044,27 @@ as in the above example. However, this uses up the name that is the
default :attr:`~django.db.models.ForeignKey.related_name` value for
:class:`~django.db.models.ForeignKey` and
:class:`~django.db.models.ManyToManyField` relations. If you
are putting those types of relations on a subclass of another model,
you **must** specify the
:attr:`~django.db.models.ForeignKey.related_name` attribute on each
such field. If you forget, Django will raise an error when you run
:djadmin:`validate` or :djadmin:`syncdb`.
are putting those types of relations on a subclass of the parent model, you
**must** specify the :attr:`~django.db.models.ForeignKey.related_name`
attribute on each such field. If you forget, Django will raise a validation
error.
For example, using the above ``Place`` class again, let's create another
subclass with a :class:`~django.db.models.ManyToManyField`::
class Supplier(Place):
# Must specify related_name on all relations.
customers = models.ManyToManyField(Restaurant, related_name='provider')
customers = models.ManyToManyField(Place)
This results in the error::
Reverse query name for 'Supplier.customers' clashes with reverse query
name for 'Supplier.place_ptr'.
HINT: Add or change a related_name argument to the definition for
'Supplier.customers' or 'Supplier.place_ptr'.
Adding ``related_name`` to the ``customers`` field as follows would resolve the
error: ``models.ManyToManyField(Place, related_name='provider')``.
Specifying the parent link field
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~