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 对象。