美文网首页
Django-17-一对多

Django-17-一对多

作者: 西海岸虎皮猫大人 | 来源:发表于2020-04-08 16:01 被阅读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')
    

    相关文章

      网友评论

          本文标题:Django-17-一对多

          本文链接:https://www.haomeiwen.com/subject/ecytmhtx.html