Django-17-一对多
2020-04-08 本文已影响0人
西海岸虎皮猫大人
模型
使用 models.ForeignKey
# 班级 和学生 1:n
class Cls(models.Model):
cno = models.AutoField(primary_key=True)
cname = models.CharField(max_length=30)
class Meta:
db_table='t_cls'
def __unicode__(self):
return u'Cls:%s--%s'%(self.cname)
# Create your models here.
# 学生 和 学生证的关系 1:1
class Student(models.Model):
#学号
sno = models.AutoField(primary_key=True)
#学生姓名
sname =models.CharField(max_length=30,unique=True)
#所在班级
cls = models.ForeignKey(Cls, related_name='student')
class Meta:
db_table='t_student'
def __unicode__(self):
return u'%s'%self.sname
插入数据
需要先保存cls,然后再将cls引用传给stu,不然会报异常
from stu.models import *
cls = Cls(cname='sannianerban')
cls.save()
stu = Student(sname='Vincent', cls=cls)
stu.save()
stu = Student(sname='Chris', cls=cls)
stu.save()
查询数据
# 根据班级查所有学生
Cls.objects.first().student.all()
# 根据学生查班级
Student.objects.first().cls.cname
封装函数插入数据
from stu.models import *
# 传入班级名和学生名,如果班级名不存在则创建,如果班级名存在则获取班级
def insertData(clsname,*snames):
try:
cls = Cls.objects.get(cname=clsname)
except Cls.DoesNotExist:
cls = Cls.objects.create(cname=clsname)
for sn in snames:
try:
stu = Student.objects.get(sname=sn)
except Student.DoesNotExist:
Student.objects.create(sname=sn,cls=cls)
# 插入数据
insertData('sannianyiban','zhangjie','xiena')