一对一的关联关系多用在当一张表的不同字段查询频次差距过大的情况下,将本可以存储在一张表的字段拆开放置在两张表中,然后将两张表建立一对一的关联关系。
字段:OneToOneField
字段参数
to:设置要关联的表。
to_field:设置要关联的字段。
on_delete: 同ForeignKey字段。
(9)增
使用 save() 、create() 方法。(常规操作)
idCard_obj = models.IdCard()
idCard_obj.num = ‘119’
idCard_obj.address = ‘火警’
idCard_obj.gender = ‘男’
idCard_obj.save()
models.Person.objects.create(
name=‘王五’,
age=12,
idCard=idCard_obj
)
(10)删
delete()方法(两个表格中的记录都需要手动删除,on_delete 失效)
person_obj = models.Person.objects.get(name=‘王五’)
models.IdCard.objects.get(person=person_obj).delete()
person_obj.delete()
(11)改
使用save()方法,(不管是正向还是反向都先获取对象然后save())
person_obj = models.Person.objects.get(name=‘张三’)
#print(person_obj.idCard)
idCard_obj = person_obj.idCard
idCard_obj.num = ‘1234’
idCard_obj.save()
(12)查
反向查询时,只需要使用类名小写即可。
正向查询:
(1). 查询 张三的地址
# person_obj = models.Person.objects.get(name=‘张三’)
# # print(person_obj.idCard) # 返回对象 IdCard object (1)
#print(person_obj.idCard.address) # 公安局
反向查询:
(2).查询身份证号是110 的用户
idCard_obj = models.IdCard.objects.get(num=‘110’)
print(idCard_obj.person) #返回对象 Person object (1)
print(idCard_obj.person.name) # 张三
#提示只需要使用类名小写即可