django mysql 一对多_Django数据库一对多数据关系

本文主要描述Django数据中一对一的数据关系,创建app等配置不再赘述。

Django操作数据库,使用ORM

ORM:关系映射对象,把传统的SQL语句封装成了类和对象的形式,在操作表中的记录时,就像在操作类和对象一样。

使用默认数据库:sqlite

操作在models.py文件中完成。

一对多数据关系:

一对多关系是通过‘子表’中设置‘父表’的外键约束来完成关联

父表的一个数据对应子表中的多个数据

举例:班级和学生

classClasses(models.Model):

id = models.AutoField(primary_key=True)

name = models.CharField(max_length=10, null=True) # 班级名称num = models.IntegerField(null=True) # 班级人数classMeta:

db_table = 'Classes'def__unicode__(self):

return'classname:%s | classnum:%s'% (self.name, self.num)

classStudent(models.Model):

id = models.AutoField(primary_key=True)

# 关联‘父表’,设置外键classes = models.ForeignKey(Classes, on_delete=models.CASCADE)

name = models.CharField(max_length=20, null=True)

age = models.IntegerField(null=True)

classMeta:

db_table = 'Student'def__unicode__(self):

return'studentname:%s | studentage:%s'% (self.name, self.age)

创建完数据库模型之后,我们要创建数据库变更文件以及应用表更文件等操作,具体操作步骤,参考上篇文章《Django数据库一对一数据关系》

对数据表中数据的查询操作

1)从子表中查询父表的数据

print  s1.classes.num 学生在所在班级的总人数

print s1.classes 学生所在班级的所有信息

2)从父表中查询子表的相关数据

1. 查询一个班级的所有学生,通过student_set属性查询

print c1.student_set.all()

2.filter:根据条件,去结果集中进行匹配查询

print c1.student_set.filter(name='lisi')

3. get :根据条件,去结果集中进行匹配查询

print  c1.student_set.get(name='lisi')

get()和filter()方法的区别

get():只能查询出一个结果,如果查询的结果不止一个,name使用get()方法会报错

filter():可以根据条件,匹配一组结果,得到一个结果集

XXX.set :Django提供的用于通过主模型(父表)对象访问子模型(子表)对象集合的属性名。

你可能感兴趣的:(django,mysql,一对多)