Commit 70061870 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #23282 -- Corrected inheritance and reverse relations example.

Thanks knowledgepoint-devs for the report and claudep for review.
parent 5dbe2a94
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -1066,19 +1066,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:`check` or :djadmin:`migrate`.
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
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~