14DjangoORM一对一关系映射的模型类创建及数据创建和查询

1一对一模型类Models的创建:

#作者
class
Author(models.Model): name = models.CharField('姓名',max_length=11,default='')

#作者的妻子 class Wife(models.Model): name = models.CharField('姓名',max_length=11) author = models.OneToOneField(Author,on_delete=models.CASCADE)

2一对一外键关系的表创建数据:

方法1:用外键名author关联主键的实例化对象a1,创建数据

(venv) D:\PycharmProjects\mysite3>python manage.py shell
>>> from bookstore.models import *
>>> a1 = Author.objects.create(name='wang')
>>> w1 = Wife.objects.create(name='wangfuren',author=a1)

方法2:用外键字段名author_id指定主键具体值a2.id,创建数据

>>> a2 = Author.objects.create(name='guo')
>>> w2 = Wife.objects.create(name='guofuren',author_id=a2.id)

3一对一的数据查询:

方法1正向查询(直接通过外键属性查询):

>>> from bookstore.models import *
>>> a1 = Author.objects.create(name='wang')
>>> w1 = Wife.objects.create(name='wangfuren',author=a1)
>>> w1.author.name
'wang'

方法2反向查询(1对1):

没有外键属性的一方,可以调用反向属性查询到关联的另一方

方向关联属性:实例对象 . 引用类名(小写),例如a1.wife

当反向引用不存在时则会触发异常

>>> from bookstore.models import *
>>> a1 = Author.objects.create(name='wang')
>>> w1 = Wife.objects.create(name='wangfuren',author=a1)
>>> a1.wife.name
'wangfuren'

备注:级联删除on_delete字段选项:

1,models.CASCADE:共生死模式,一旦执行删除,所有外键ForeignKey对象也跟着一并删除
2,models.PROTECT:如果有数据和你关联,我就不让你删
3,SET_NULL:只要你删除,我就把和你关联的外键设置成null;前提时需要指定null=True
4,SET_DEFAULT:给外键设置一个默认值,我让你删,你删除后,我就把外键设置成默认值

 

posted @ 2021-12-01 11:12  linuxTang  阅读(116)  评论(0)    收藏  举报