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')
上一篇下一篇

猜你喜欢

热点阅读