ForeignKey

ForeignKey 欄位用於在模型之間建立 many-to-one 關係。不像大多數其他欄位需要位置引數。以下示例演示了汽車和所有者關係:

from django.db import models

class Person(models.Model):
    GENDER_FEMALE = 'F'
    GENDER_MALE = 'M'

    GENDER_CHOICES = (
        (GENDER_FEMALE, 'Female'),
        (GENDER_MALE, 'Male'),
    )

    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    age = models.SmallIntegerField()

class Car(model.Model)
    owner = models.ForeignKey('Person')
    plate = models.CharField(max_length=15)
    brand = models.CharField(max_length=50)
    model = models.CharField(max_length=50)
    color = models.CharField(max_length=50)

該欄位的第一個引數是與模型相關的類。第二個位置引數是 on_delete 引數。在當前版本中,此引數不是必需的,但在 Django 2.0 中將是必需的。引數的預設功能如下所示:

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.CASCADE)
    ...

當從 Person 模型中刪除其所有者時,這將導致從模型中刪除 Car 物件。這是預設功能。

class Car(model.Model)
    owner = models.ForeignKey('Person', on_delete=models.PROTECT)
    ...

如果 Person 物件與至少一個 Car 物件相關,則會阻止刪除它們。應首先刪除引用 Person 物件的所有 Car 物件。然後可以刪除 Person 物件。