當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。