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

      •  正向添加和查询

      •  反向添加和查询

原文地址:https://www.cnblogs.com/ivy-blogs/p/10700229.html