Django模型的关联查询方式
SQL语句中有很多的关联查询:外关联、内关联、自关联等。而这些都是在进行多表之间的查询。一次你首先需要建立多张表,并建立他们之间的联系。
关系 | moels语法 | 注释 |
---|---|---|
一对一 | models.OneToOneField | 在两种表中的任意一个添加即可 |
一对多 | mdoels.ForeignKey | 在多类中添加外键 |
多对多 | models.ManyToManyField | 在两种表中任意一个添加即可 |
表之间的关系很好设定,只需要添加对应的字段即可,但是有几点需要注意!
1、关系型字段可以在两张表中同时设置,但是当两张表中的数据都为空时,两个关系型字段必须有一个可以为空,否则会发生类“死锁”的情况。两张表插入数据的前提是另一张表中要有已存在的数据。所以咋实际所运用中最好只设置一个。
2、设置完表之间的关系后,在表的查询过程中需要区别对待。是否设置了关系字段会影响到数据的操作。
1、一对一的关联查询
创建好类后,需要在两个类中的任意一个类中定义关联字段,该字段的相关属性,可以为空值,但是在关联另一张表中的数据时,必须要一一对应不可重复。
models代码:
from django.db import models
# Create your models here.
# 定义学生类
class Student(models.Model):
Name = models.CharField(max_length=10)
Age = models.IntegerField(null=True, blank=True)
# 定义将来显示数据对象时显示的内容
def __str__(self):
return self.Name
# 定义学生卡类
class Card(models.Model):
Num = models.CharField(max_length=11)
# 定义一对一关系字段
Stu = models.OneToOneField('Student')
# 定义将来显示数据对象时显示的内容
def __str__(self):
return self.Stu.Name + '---' + self.Num
代码分析:
在应用的models模块中定义如上数据模型之后,需要先进行迁移才能够在数据库中产生对应的表。并保存数据。
生成迁移文件:python manage.py makemigrations
迁移到数据库:python manage.py migrate
完成迁移后,就可以进入交互式环境中进行数据的操作了。
交互式环境中代码示例: