# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import models # Create your models here. # 一对多数据关系 # 一对多关系是通过在‘子表’中设置‘父表’的外键引用来完成关联 # 父表的一个数据对应着子表的多个数据 # 例子:班级和学生 class Classes(models.Model): id = models.AutoField(primary_key=True,verbose_name=u'主键') name = models.CharField(max_length=10,null=True,blank=True,verbose_name=u'班级名称') num = models.IntegerField(null=True,blank=True,verbose_name=u'班级人数') class Meta: db_table = 'classes' def __unicode__(self): return 'classname:%s|classnum:%s'%(self.name,self.num) class Student(models.Model): id = models.AutoField(primary_key=True,verbose_name=u'主键') # 关联主表(‘父表’),设置外键 classes = models.ForeignKey(Classes,on_delete=models.CASCADE,verbose_name=u'外键') name = models.CharField(max_length=20,null=True,blank=True,verbose_name=u'学生的姓名') age = models.IntegerField(null=True,blank=True,verbose_name=u'学生的年龄') class Meta: db_table = 'student' def __unicode__(self): return 'studentname:%s|studentage:%s'%(self.name,self.age) # 从子表中查询父表中的数据 # s1.classes.num //查询学生所在班级的总人数 # s1.classes.name //查询学生所在班级的名称 # 从父表中查询子表的相关数据 # 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') # XXX_set:Django提供的用于通过主模型(父表)对象,访问子模型(子表)对象集合的属性名 ''' get()和filter()的区别: get():只能查询出一个结果,如果查询结果不止一个,那么使用get()方法会报错; filter()可以根据条件,匹配一组结果,得到一个结果集; '''
Django中的数据库模型类-models.py(一对多的关系)
最新推荐文章于 2023-08-28 14:18:36 发布