zoukankan      html  css  js  c++  java
  • 2019.03.21 创建表 一对多,一对一,多对多。

    一对一关系

    使用OneToOneField()

    讲的应该是主键关联的东西,主从关系

    学生证学号关联学生学号,学号修改随之修改。

    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models

    # Create your models here.

    # 学生 和 学生证的关系 1:1
    class Student(models.Model):
    #学号
    sno = models.AutoField(primary_key=True)
    #学生姓名
    sname =models.CharField(max_length=30,unique=True)

    #给表去个名字吧

    class Meta:
    db_table='t_student'

    打印输出的东西编码打印

    def __unicode__(self):
    return u'%s'%self.sname

    class Scard(models.Model):
    #学号
    sno = models.OneToOneField(Student,primary_key=True,on_delete=models.CASCADE)
    department= models.CharField(max_length=50)
    major = models.CharField(max_length=20)
    enterdate = models.DateField()


    class Meta:
    db_table='t_scard'

    def __unicode__(self):
    return u'Scard:%s,%s'%(self.student.sname,self.major)

    from post.models import *
    stu = Student(sname='zhangsan')
    stu.save()
    scard = Scard(student=stu,department='计算机科学与技术系',major='计算机及应用',enterdate='2018-9-1')
    scard.save()

    #正向查询(主表的对象.从表类名小写)
    Student.objects.first().scard
    <Scard: Scard:zhangsan,计算机>


    #逆向查询(从表的对象.一对一属性名)
    Scard.objects.first().sno
    <Student: zhangsan>

    一对多的关系,有个关键字forognkey  1:n   班级  :学生、

    动不动就封装函数,仍异常。

    一对多关系



    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals

    from django.db import models

    #班级 和学生   1:n
    class Clazz(models.Model):
      cno = models.AutoField(primary_key=True)
      cname = models.CharField(max_length=30)


      class Meta:
          db_table='t_clazz'

      def __unicode__(self):
          return u'Clazz:%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)

      #所在班级
      clazz = models.ForeignKey(Clazz,related_name='student')

      class Meta:
          db_table='t_student'

      def __unicode__(self):
          return u'%s'%self.sname




    from post.models import *
    cls = Clazz(cname='B208Python班')
    cls.save()
    stu = Student(sname='lisi',clazz=cls)
    stu.save()

    Clazz.objects.first().student.all()
    <QuerySet [<Student: zhangsan>]>

    Student.objects.first().clazz.cname
    u'B207Python'

    封装函数插入数据



    from stu.models import *
    def insertData(clsname,*snames):
      try:
          cls = Clazz.objects.get(cname=clsname)
      except Clazz.DoesNotExist:
          cls = Clazz.objects.create(cname=clsname)
       
      for sn in snames:
          try:
              stu = Student.objects.get(sname=sn)
          except Student.DoesNotExist:
              Student.objects.create(sname=sn,clazz=cls)


       
    insertData('B202Python班','zhangjie','xiena')


    多对多的关系

    多对多关系


    # 课程表 和 教师表 n:n
    class Course(models.Model):
      course_id=models.AutoField(primary_key=True)
      course_name=models.CharField(max_length=30,unique=True)

      class Meta:
          db_table='t_course'

      def __unicode__(self):
          return u'Course:%s'%self.course_name

    class Teacher(models.Model):
      tid = models.AutoField(primary_key=True)
      tname = models.CharField(max_length=30,unique=True)
      course = models.ManyToManyField(Course)

      class Meta:
          db_table='t_teacher'

      def __unicode__(self):
          return u'Teacher:%s--%s'%(self.tname,self.course)

    插入数据



    from post.models import *
    cour1 = Course(course_name='Java')
    cour1.save()
    cour2 = Course(course_name='Python')
    cour2.save()
    t1 = Teacher(tid='1001',tname='杨老师')
    t1.save()
    t2 = Teacher(tname='李老师')
    t2.save()
    t3 = Teacher(tname='张老师')
    t3.save()
    t1.course.add(cour1)
    t2.course.add(cour2)
    t3.course.add(cour1,cour2)

    正向查询——逆向查询


    Course.objects.first().teacher_set.all()
    <QuerySet [<Teacher: Teacher:杨老师--post.Course.None>, <Teacher: Teacher:张老师--post.Course.None>]>
    Teacher.objects.first().course.all()
    <QuerySet [<Course: Course:Java>]>

    封装函数插入数据


    def insertData(tname,*coursenames): (可变参数)
      cour_name=[]
       
      for c in coursenames:
          try:
              cour = Course.objects.get(course_name=c)
          except Course.DoesNotExist:
              cour = Course.objects.create(course_name=c)
          cour_name.append(cour)
      t = Teacher(tname=tname)
      t.save()
      t.course.add(*cour_name) (解析参数)

    insertData('wanglaoshi','语文','数学')



  • 相关阅读:
    pytest+allure详情版
    【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required
    Docker-Portainer
    滑动解锁和截图
    调用JavaScript(浏览器滚动条)
    WebDriver操作cookie
    下载文件
    多表单切换
    利用parameterized模块进行unittest参数化
    关于软件测试必备的技能
  • 原文地址:https://www.cnblogs.com/Py-king/p/10572740.html
Copyright © 2011-2022 走看看