一对一关系
作者:互联网
一对一关系是什么
模型类使用
OneToOneField
用来定义一对一关系;
比如当你拥有一个老师表时,紧接着你还需要一个教授表,那么教授表可能拥有老师表的一系列属性,那么你还不想把老师表中的字段直接复制到教授表那么可以通过OnToOneField
来实现教授表继承老师表。
OneToOneField(to, on_delete, parent_link=False, options) class Teacher(models.Model): name = models.CharField(max_length=50) age = models.CharField(max_length=50) def __str__(self): return self.name class Professor(models.Model): teacher = models.OneToOneField(Teacher,primary_key=True,on_delete=models.CASCADE) big_project = models.CharField(max_length=50) def __str__(self): return self.teacher.name
一对一关系的增删改操作
>>> t1 = Teacher.objects.create(name='Jack',age='22') >>> t2 = Teacher.objects.create(name='Bob',age='17') >>> p1 = Professor.objects.create(teacher=t1,big_project='雾霾净化术') >>> p1.teacher <Teacher: Jack> >>> p1.teacher = t2 >>> p1.save()
在上面的测试中,看似已经将p1
对应的教授变成了Bob
;但是在数据库中之前t1
老师所对应的教授信息还存在,此时的赋值操作并不会覆盖掉教授他之前的教授数据,只是重新创建了一条。 正确的做法应该是将某一条数据的一对一关系通过delete
关系先删除之后再重新赋予
一对一关系正向查询
# 正向查询:通过教授,查询对应的讲师信息 >>> p1.teacher <Teacher: Bob>
一对一关系反向查询
# 反向查询:通过讲师,查询教授信息, 反向查询时,只需要 模型类 本身即可 t1.professor.name
标签:关系,教授,p1,name,一对一,models,teacher 来源: https://www.cnblogs.com/yrdy/p/16416730.html