-
僅在指定自定義中間模型時使用。 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)
Membership
對Person
有two
外鍵(person
和inviter
),這使得關係模棱兩可,Django 不知道該使用哪一個。在這種情況下,您必須使用through_fields
明確指定 Django 應該使用哪些外鍵,如上例所示。through_fields
接受 2 元組('field1', 'field2')
,其中field1
是模型的外鍵的名稱,ManyToManyField
group
),而field2
是模型的名稱目標模型的外鍵(在本例中為person
)。當您在參與多對多關係的任何(甚至兩個)模型的中間模型上有多個外鍵時,您
must
指定through_fields
。當使用中間模型並且模型有兩個以上的外鍵時,這也適用於遞歸關係,或者您想明確指定 Django 應該使用哪兩個。
本文介紹 django.db.models.ManyToManyField.through_fields
的用法。
聲明
ManyToManyField.through_fields
相關用法
- Python Django ManyToManyField.through用法及代碼示例
- Python Django ManyToManyField.symmetrical用法及代碼示例
- Python Matplotlib.figure.Figure.add_gridspec()用法及代碼示例
- Python Matplotlib.figure.Figure.subplots_adjust()用法及代碼示例
- Python Matplotlib.pyplot.matshow()用法及代碼示例
- Python Matplotlib.axis.Axis.get_tick_space()用法及代碼示例
- Python Matplotlib.pyplot.thetagrids()用法及代碼示例
- Python Matplotlib.axes.Axes.text()用法及代碼示例
- Python Matplotlib.pyplot.ion()用法及代碼示例
- Python Matplotlib.axes.Axes.start_pan()用法及代碼示例
- Python Matplotlib.axes.Axes.get_ylabel()用法及代碼示例
- Python Matplotlib.axis.Axis.get_major_locator()用法及代碼示例
- Python Numpy MaskedArray.argmin()用法及代碼示例
- Python Matplotlib.axis.Tick.get_window_extent()用法及代碼示例
- Python Matplotlib.artist.Artist.set_alpha()用法及代碼示例
- Python Matplotlib.pyplot.xkcd()用法及代碼示例
- Python Matplotlib.colors.TwoSlopeNorm用法及代碼示例
- Python Matplotlib.pyplot.axvspan()用法及代碼示例
- Python Matplotlib.axis.Axis.get_agg_filter()用法及代碼示例
- Python Matplotlib.axis.Axis.get_minorticklabels()用法及代碼示例
- Python Matplotlib.axes.Axes.set_ybound()用法及代碼示例
- Python Numpy MaskedArray.allequal()用法及代碼示例
- Python Matplotlib.pyplot.bone()用法及代碼示例
- Python Matplotlib.axes.Axes.get_path_effects()用法及代碼示例
- Python Matplotlib.axis.Axis.set_picker()用法及代碼示例
注:本文由純淨天空篩選整理自djangoproject.com大神的英文原創作品 django.db.models.ManyToManyField.through_fields。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。