其他分享
首页 > 其他分享> > 一对一关系

一对一关系

作者:互联网

一对一关系是什么

模型类使用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