在Django 4.0中,一对一关联表示一个模型的一个实例只能关联到另一个模型的一个实例。这种关系也被称为“一对一映射”。以下是关于一对一关联的基本概念和用法:

定义一对一关系:

考虑一个例子,假设有两个模型:Person(人)和Passport(护照)。一本护照只能属于一个人,而一个人也只能有一个护照。
from django.db import models

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

class Passport(models.Model):
    number = models.CharField(max_length=10)
    owner = models.OneToOneField(Person, on_delete=models.CASCADE)

在Passport模型中,通过 OneToOneField 定义了一个一对一关系,将 Passport 与 Person 关联。这意味着一本护照(Passport)只能属于一个人(Person),而一个人(Person)也只能有一本护照。

添加关联数据:

使用一对一关系时,可以轻松地添加和查询关联数据。例如,为某个人添加一本新护照:
# 获取某个人
person = Person.objects.get(pk=1)

# 创建一本新护照
new_passport = Passport.objects.create(number='ABC123')
new_passport.owner = person
new_passport.save()

查询一对一关系:

可以通过一对一关系进行灵活的查询。例如,查找某本护照所属的人:
# 获取某本护照
passport = Passport.objects.get(pk=1)

# 查找该护照所属的人
person = passport.owner

使用 on_delete 参数:

在定义一对一关系时,需要使用 on_delete 参数指定在关联对象被删除时的行为。常见的选项包括:

  •  models.CASCADE: 级联删除,删除关联对象时同时删除所有关联的对象。

  •  models.PROTECT: 保护,防止删除关联对象。

  •  models.SET_NULL: 将关联字段设为NULL。

class Passport(models.Model):
    number = models.CharField(max_length=10)
    owner = models.OneToOneField(Person, on_delete=models.SET_NULL, null=True)

以上是Django 4.0中一对一关联的基本用法,这种关系常用于表示一一对应的关联,例如人和护照之间的关系。


转载请注明出处:http://www.zyzy.cn/article/detail/7197/Django