当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Django ManyToManyField.through_fields用法及代码示例


本文介绍 django.db.models.ManyToManyField.through_fields 的用法。

声明

ManyToManyField.through_fields

仅在指定自定义中间模型时使用。 Django 通常会确定要使用中间模型的哪些字段,以便自动建立多对多关系。但是,请考虑以下模型:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(
        Person,
        through='Membership',
        through_fields=('group', 'person'),
    )

class Membership(models.Model):
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    inviter = models.ForeignKey(
        Person,
        on_delete=models.CASCADE,
        related_name="membership_invites",
    )
    invite_reason = models.CharField(max_length=64)

MembershipPersontwo 外键( personinviter ),这使得关系模棱两可,Django 不知道该使用哪一个。在这种情况下,您必须使用 through_fields 明确指定 Django 应该使用哪些外键,如上例所示。

through_fields 接受 2 元组 ('field1', 'field2') ,其中 field1 是模型的外键的名称, ManyToManyField 定义在(在这种情况下为 group),而 field2 是模型的名称目标模型的外键(在本例中为 person)。

当您在参与多对多关系的任何(甚至两个)模型的中间模型上有多个外键时,您 must 指定 through_fields 。当使用中间模型并且模型有两个以上的外键时,这也适用于递归关系,或者您想明确指定 Django 应该使用哪两个。

相关用法


注:本文由纯净天空筛选整理自djangoproject.com大神的英文原创作品 django.db.models.ManyToManyField.through_fields。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。