summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/ref/contrib/admin/index.txt7
-rw-r--r--docs/ref/models/fields.txt11
-rw-r--r--docs/topics/db/models.txt12
3 files changed, 22 insertions, 8 deletions
diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt
index 1b02b7d403..4f459838f2 100644
--- a/docs/ref/contrib/admin/index.txt
+++ b/docs/ref/contrib/admin/index.txt
@@ -2629,6 +2629,13 @@ we can do this with inline admin models. Suppose we have the following models::
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
+ class Meta:
+ constraints = [
+ models.UniqueConstraint(
+ fields=["person", "group"], name="unique_person_group"
+ )
+ ]
+
The first step in displaying this intermediate model in the admin is to
define an inline class for the ``Membership`` model::
diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt
index 52cf0b8286..c45688184d 100644
--- a/docs/ref/models/fields.txt
+++ b/docs/ref/models/fields.txt
@@ -2030,13 +2030,6 @@ that control how the relationship functions.
.. note::
- If you don't want multiple associations between the same instances, add
- a :class:`~django.db.models.UniqueConstraint` including the from and to
- fields. Django's automatically generated many-to-many tables include
- such a constraint.
-
- .. note::
-
Recursive relationships using an intermediary model can't determine the
reverse accessors names, as they would be the same. You need to set a
:attr:`~ForeignKey.related_name` to at least one of them. If you'd
@@ -2045,7 +2038,9 @@ that control how the relationship functions.
If you don't specify an explicit ``through`` model, there is still an
implicit ``through`` model class you can use to directly access the table
- created to hold the association. It has three fields to link the models.
+ created to hold the association. It has three fields to link the models, a
+ primary key and two foreign keys. There is a unique constraint on the two
+ foreign keys.
If the source and target models differ, the following fields are
generated:
diff --git a/docs/topics/db/models.txt b/docs/topics/db/models.txt
index 415d3829dd..b7bd36bc81 100644
--- a/docs/topics/db/models.txt
+++ b/docs/topics/db/models.txt
@@ -503,10 +503,22 @@ something like this::
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
+ class Meta:
+ constraints = [
+ models.UniqueConstraint(
+ fields=["person", "group"], name="unique_person_group"
+ )
+ ]
+
When you set up the intermediary model, you explicitly specify foreign
keys to the models that are involved in the many-to-many relationship. This
explicit declaration defines how the two models are related.
+If you don't want multiple associations between the same instances, add a
+:class:`~django.db.models.UniqueConstraint` including the ``from`` and ``to``
+fields. Django's automatically generated many-to-many tables include such a
+constraint.
+
There are a few restrictions on the intermediate model:
* Your intermediate model must contain one - and *only* one - foreign key