zoukankan      html  css  js  c++  java
  • 创建多对多表关系的三种方式

    创建多对多表关系的三种方式

    """
    在设计项目的时候  一定要考虑的其它的要求,要让程序有扩展性, 防止后续的迭代更新...
    尤其是数据库,必须要有扩展性
    """
    
    1. 全自动

      好处就是django orm会自动帮你创建第三张关系表,你完全不用手动再去创建了

      缺点是它帮你创建的第三张关系表 不会再额外添加字段,虽然有点方便,但是第三张表扩展性差,不能够随意添加额外的字段

      authors = models.ManyToManyField(to='Author')

    2. 纯手动(不是很好)

      虽然说不是很好,但是也是稍微有点好处的,好处就在于第三张表可以任意添加额外的字段

      缺点就是orm查询的时候, 很多方法都不支持,查询的时候过于麻烦,拖时间

                  class Book(models.Model):
                      ...
                      
                  class Author(models.Models):
                      ...
                  
                  class BookAuthor(models.Model):
                      book_id = models.ForeignKey(to='Book')
                      author_id = models.ForeignKey(to='Author')
                      create_time = models.DateField(auto_now_add=True)
                      ...
      
    3. 半自动(较为好用):

      个人认为还是不错的,手动建表,但是你要告诉orm,跟它讲你建了第三张关系表.orm你帮我提供查询方法吧

      缺点是不支持使用 add() set() remove() clear()

      from django.db import models
      class Book(models.Model):
          authors = models.ManyToManyField(to='Author',through='BookAuthor', through_fields=('book','author'))
      class Author(models.Model):
          ...
      class BookAuthor(models.Model):
          book = models.ForeignKey(to='Book')
          author = models.ForeignKey(to='Author')
          create_time = models.DateField(auto_now_add=True)
          
      

    注意点

    总结:想添加额外字段就半自动.
    
    1. 半自动 一定要加两个参数

      即通过哪张表建立关系,通过哪些字段建立关系

      through = 'BookAuthor',through_fields=('book','author')

    2. 后面字段的顺序

      通过那个字段查询单表就把哪个字段放前面.

  • 相关阅读:
    Oracle VM VirtualBox 虚拟机中桥接模式一直不能用 ,需要安装 VBoxNetLwf.inf
    Windows7窗口跑到屏幕外面
    手动操作群晖蜂鸣器指示灯方法
    DHT11温湿度传感器接入HomeBridge
    DIY树莓派Homebridge智能台灯
    群晖NAS局域网无法跑满千兆排查
    虚拟机性能监控与故障处理工具------JDK的命令行工具
    垃圾收集器与内存分配策略-内存分配与回收策略
    Minor GC 与Full GC有什么不一样
    java的关键字与保留字
  • 原文地址:https://www.cnblogs.com/jhpy/p/11761513.html
Copyright © 2011-2022 走看看