一对一关系 — Django 文档
来自菜鸟教程
Django/docs/2.2.x/topics/db/examples/one to one
一对一的关系
要定义一对一关系,请使用 OneToOneField。
在这个例子中,一个 Place
可以是一个 Restaurant
:
下面是可以使用 Python API 工具执行的操作示例。
创建几个地方:
创建餐厅。 将“父”对象的 ID 作为此对象的 ID 传递:
餐厅可以访问其位置:
Place 可以访问其餐厅(如果有):
p2 没有关联的餐厅:
您还可以使用 hasattr
来避免异常捕获的需要:
使用赋值符号设置位置。 因为 place 是 Restaurant 的主键,所以保存将创建一个新餐厅:
使用相反方向的赋值再次设置位置:
请注意,您必须先保存对象,然后才能将其分配给一对一关系。 例如,用未保存的 Place
创建一个 Restaurant
会引发 ValueError
:
Restaurant.objects.all() 只返回餐厅,而不是地点。 请注意,有两个餐厅 - 餐厅是在调用 r.place = p2 时创建的 Ace Hardware:
Place.objects.all() 返回所有地点,无论它们是否有餐厅:
您可以使用 跨关系 查找来查询模型:
这当然反过来工作:
向餐厅添加服务员:
查询服务员: