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

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

    第一种(django自动创建)

    优点是django自动创建的,并且可以使用django中的方法

    缺点是不可以在关系表中添加其他的字段

    1. models.py
    
    class Author(models.Model):
        ...
        books = models.ManyToManyField(to="Book")
        
    class Book(models.Model):
        ...
    

    第二种(手动创建一张关系表)

    优点在于可以任意增加新字段

    缺点是在orm查询时,很多方法不支持,查询会很麻烦

    class Author(models.Model):
    	...
     
    class Book(models.Model):
    	...
        
    class AuthorToBook(models.Model):
    	author = models.ForeignKey(to='Author') 
        book = models.Foreignkey(to='Book')
      	... # 还可以添加很多字段
    

    ForeignKey会自动添加 _id ,那么 author就会变成author_id

    第三种(结合版) - 在设计项目的时候要给自己留一条后路

    有个缺点就是不可以使用对关系表进行操作的功能了,add,set,remove,clear

    class Author(models.Model):
    	...
        books = models.ManyToMany(to='Book', through='AuthorToBook', though_field=('author', 'book'))
        
    class Book(models.Model):
    	...
        
    class AuthorToBook(models.Model):
    	author = models.ForeignKey(to='Author')
        book = models.ForeignKey(to='Book')
        ... # 还可以添加很多字段
    

    through=: 指定那张表为关系表

    though_field=: 指定关系表中的字段名,顺序是在那个表中使用ManyToMany多对多建立关系,那么第一个位置就是当前表在关系表中对应的字段, 也就是说在那个表里面,那个表在关系表中对应的字段就排前面.

  • 相关阅读:
    【bzoj1029】[JSOI2007]建筑抢修
    【bzoj2748】[HAOI2012]音量调节
    【bzoj1041】[HAOI2008]圆上的整点
    【bzoj2743】[HEOI2012]采花
    【bzoj1034】[ZJOI2008]泡泡堂BNB
    【bzoj1260】[CQOI2007]涂色paint
    【bzoj2728】[HNOI2012]与非
    【bzoj2003】[Hnoi2010]Matrix 矩阵
    【bzoj1028】[JSOI2007]麻将
    利用adb截屏
  • 原文地址:https://www.cnblogs.com/xiongchao0823/p/11762071.html
Copyright © 2011-2022 走看看