mirror of
https://github.com/django/django.git
synced 2025-07-24 13:44:32 +00:00
Fixed #22217 - ManyToManyField.through_fields fixes.
- Docs description of arguments mix up. - Keep it from erroneously masking E332 check. - Add checks E338 and E339, tweak message of E337.
This commit is contained in:
parent
f4d91638fc
commit
aaad3e27ac
5 changed files with 154 additions and 49 deletions
|
@ -94,7 +94,9 @@ Related Fields
|
|||
* **fields.E334**: The model is used as an intermediate model by ``<model>``, but it has more than one foreign key from ``<model>``, which is ambiguous. You must specify which foreign key Django should use via the through_fields keyword argument.
|
||||
* **fields.E335**: The model is used as an intermediate model by ``<model>``, but it has more than one foreign key to ``<model>``, which is ambiguous. You must specify which foreign key Django should use via the through_fields keyword argument.
|
||||
* **fields.E336**: The model is used as an intermediary model by ``<model>``, but it does not have foreign key to ``<model>`` or ``<model>``.
|
||||
* **fields.E337**: The field is given an iterable for through_fields, which does not provide the names for both link fields that Django should use for the relation through <model>.
|
||||
* **fields.E337**: Field specifies ``through_fields`` but does not provide the names of the two link fields that should be used for the relation through ``<model>``.
|
||||
* **fields.E338**: The intermediary model ``<through model>`` has no field ``<field name>``.
|
||||
* **fields.E339**: ``<model>.<field name>`` is not a foreign key to ``<model>``.
|
||||
|
||||
Signals
|
||||
~~~~~~~
|
||||
|
|
|
@ -1353,11 +1353,11 @@ that control how the relationship functions.
|
|||
|
||||
class Group(models.Model):
|
||||
name = models.CharField(max_length=128)
|
||||
members = models.ManyToManyField(Person, through='Membership', through_fields=('person', 'group'))
|
||||
members = models.ManyToManyField(Person, through='Membership', through_fields=('group', 'person'))
|
||||
|
||||
class Membership(models.Model):
|
||||
person = models.ForeignKey(Person)
|
||||
group = models.ForeignKey(Group)
|
||||
person = models.ForeignKey(Person)
|
||||
inviter = models.ForeignKey(Person, related_name="membership_invites")
|
||||
invite_reason = models.CharField(max_length=64)
|
||||
|
||||
|
@ -1368,9 +1368,10 @@ that control how the relationship functions.
|
|||
above.
|
||||
|
||||
``through_fields`` accepts a 2-tuple ``('field1', 'field2')``, where
|
||||
``field1`` is the name of the foreign key to the target model (``person``
|
||||
in this case), and ``field2`` the name of the foreign key to the model the
|
||||
:class:`ManyToManyField` is defined on (``group`` in this case).
|
||||
``field1`` is the name of the foreign key to the model the
|
||||
:class:`ManyToManyField` is defined on (``group`` in this case), and
|
||||
``field2`` the name of the foreign key to the target model (``person``
|
||||
in this case).
|
||||
|
||||
When you have more than one foreign key on an intermediary model to any
|
||||
(or even both) of the models participating in a many-to-many relationship,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue