定义一对一关系:
考虑一个例子,假设有两个模型: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