美文网首页
django03一对多关系

django03一对多关系

作者: fly5 | 来源:发表于2018-09-29 16:52 被阅读0次
    • 逻辑删除
      isdel

    • objects管理器(Manager对象)
      自定义管理器

      class studentManager(models.Manager):
          # 重写all()
          def all(self):
          # 获取所有数据 super().all()
          # 逻辑删除的数据不显示
          return super().all().filter(isdel=False)
      

      系统(默认自动创建)

       objects = models.Manager()
      

      自定义

        myobjects = models.Manager()
      
    • 添加类方法[快速创建模型对象]

      @classmethod
      def create(cls,name,score):
          stu = cls(s_name=name,s_score=score)
          return stu
      

    一对一

    人 模型类
    身份证 模型
    关系: 一对一
    主表(重要数据),从表(声明关系)
    
    class Person(models.Model):
        p_name =models.CharField(max_length=50)
        p_age = models.IntegerField()
        
        
    class IDCard(models.Model):
        i_num = models.CharField(max_length=50)
        i_addr = models.CharField(max_length=255)
    
        # 关联(约束)
        # 通过外键实现,在外键中添加唯一约束(保证一对一)
        # 存的是person对象的id
        
        
        # 默认模式是 models.CASECADE
        # 默认情况:当人删除时,身份证存在,人和身份证一起删除
        # 默认情况:当人删除时,身份证不存在,人删除
        # i_person = models.OneToOneField(Person)
        
        
        # models.PROTECT保护模式:级联数据存在,抛出异常:级联数据不存在,直接删除:
        # 当人删除时,身份证存在,抛出异常
        # 当人删除时,身份证不存在,直接删除
        # i_person = models.OneToOneField(Person,on_delete=models.PROTECT)
       
       
        # models.SET_NULL 置空模式[该字段必须设置  允许为空]
        # 当人删除时,身份证存在,该属性设置bull
        # 当人删除时,身份证不存在,直接删除
        # i_person = models.OneToOneField(Person, on_delete=models.SET_NULL, null=True)    
        
        # model.SET_DAFAULT 设置默认值模式
        # i_person = models.OneToOneField(Person, on_delete=models.SET_DAFAULT, default=11)    
        
    

    一对多

    班级 模型类
    学生 模型类
    一个班对应多个学生
    
    class Grade(models.Model):
        g_name = models.CharField(max_length=50)
    
    class Student(models.Model):
        s_name = models.CharField(max_length=50)
        s_score = models.IntegerField()
        s_detail = models.CharField(max_length=50)
        
        # 声明关系
        # 哪个班级的学生
        s_grade = models.ForeignKey(Grade,on_delete=models.SET_DETAULT,default=1)
    
    

    student_set是object同源
    主获取从,隐式访问,对象.关系表(小写)_set.all()
    student = grade.student_set.all()
    从获取主,显示访问:对象.属性
    grade = stu.s_grade

    相关文章

      网友评论

          本文标题:django03一对多关系

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