• django模型三


    表关系的实现

    •  一对一
      •  
         1 from django.db import models
         2 
         3 # Create your models here.
         4 
         5 class Account(models.Model):
         6     username = models.CharField(max_length=20)
         7     password = models.CharField(max_length=50)
         8     phonenum = models.CharField(max_length=20, default='')
         9     c_time = models.DateTimeField(auto_now_add=True,)  # 创建时间
        10 
        11 
        12 class Detail(models.Model):
        13     num = models.CharField(max_length=10, default='')
        14     hobby = models.CharField(max_length=10, default='')
        15     account = models.OneToOneField('Account', on_delete=models.CASCADE)

        在对应表里面新加字段,使用models.OnToOneField方法,第一个参数接收对应表的类的字符串,第二个设置关联,当被关联的表被删除的时候,该表也会被删除

      • 使用:
        • 用Detail查询username  
        • Detail.objects.filter(num="3").first().account.username
      • 当关联的字段不存在时,直接调用关联字段会报错
    • 多级关系实现
       1 from django.db import models
       2 
       3 
       4 # Create your models here.
       5 
       6 
       7 class Student(models.Model):
       8     name = models.CharField(max_length=20)
       9     cls = models.ForeignKey('Class', on_delete=models.SET_NULL, null=True)  # 一对多外键关联
      10 
      11 
      12 class Class(models.Model):
      13     name = models.CharField(max_length=20)
      14 
      15 
      16 class Source(models.Model):
      17     name = models.CharField(max_length=20)
      18     student = models.ManyToManyField(Student, through='StudentSource')  # 多对多关联
      19 
      20 
      21 class StudentSource(models.Model):  # 自定义多对多第三张表
      22     student = models.ForeignKey(Student, on_delete=models.CASCADE)
      23     course = models.ForeignKey(Source, on_delete=models.CASCADE)
      • 一对多关系:

        • 使用ForeignKey关联另一张表

          • 正向操作

            • 创建关联

            • 关联查询

            • 删除关联

              • 删除关联时,被删除的关联字典必须可以为null

              • 设置为None

            • 关联修改
          • 反向操作:
            • 反向创建关联:  django会在被关联表的对象里新增加一个关联对象的类名的小写+__set的管理器,可以通过这个管理器对反向关联的对象进行操作。这个管理器具有大部分关联对象的正向管理器objects的方法,增删改差皆可以用过这个管理器实现。
              • 添加和新增:
              • 查询所有关联的对象:
              • 删除关联对象

                • remove是删除一个,clear是删除所有。

              • 改变关联对象

                • set方法会清空之前的数据(调用clear),然后再将set的对象关联起来

      • 多对多关系

        • 多对多使用ManyToManyField字段定义,如何没有指定through,那么会自动创建第三张表。当指定了中间表的时候,必须使用中间表的管理器对关联的两张表操作 

        •  1 from django.db import models
           2 
           3 
           4 # Create your models here.
           5 
           6 class Student(models.Model):
           7     name = models.CharField(max_length=20)
           8 
           9 
          10 class Role(models.Model):
          11     role_name = models.CharField(max_length=20)
          12     student = models.ManyToManyField(Student)

          创建模型

        •  添加student和role

        •  正向添加和查询

        •  反向添加和查询

  • 相关阅读:
    玩游戏怎么能没有皮肤,Python一键采集王某耀游戏所有皮肤,这波就很舒服
    最近办公室每天都会少点东西,我用Python直接控制摄像头拍照发到邮箱,最后发现...
    23个适合Python初学者练手的小脚本,学会技术嘎嘎增长!
    π的值该怎么求?
    ItextSharp.text.pdf
    改画册相关注意事项
    装饰者模式
    策略模式
    简单工厂模式
    代理模式
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/10700229.html
Copyright © 2020-2023  润新知