网络编程
位置:首页>> 网络编程>> Python编程>> 详解解Django 多对多表关系的三种创建方式

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

作者:秋刀鱼的滋味w  发布时间:2021-03-13 04:59:16 

标签:Django,多对多,表关系
目录
  • 1、方式一:自动创建

  • 2、方式二:纯手动创建

  • 3、方式三:半自动创建

1、方式一:自动创建


# django orm 自动帮我们创建第三张表,我的app名字是app01, 表名为:app01_book_authors
# 这种方式可以让Django迅速的帮我们建一张关系表出来,好处是可以通过这张表进行跨表查询,坏处是一张虚拟表,拓展性差。

# 书籍表
class Book(models.Model):
   name = models.CharField(max_length=32)
   authors = models.ManyToManyField(to='Author')

# 作者表
class Author(models.Model):
   name = models.CharField(max_length=32)

2、方式二:纯手动创建


# 这种方式无法通过orm跨表查询(不建议使用)

# 表1
class Book(models.Model):
   name = models.CharField(max_length=32)

# 表2
class Author(models.Model):
   name = models.CharField(max_length=32)

# 表3
class Book2Author(models.Model):
   book = models.ForeignKey(to='Book')
   author = models.ForeignKey(to='Author')
   info = models.CharField(max_length=32)

3、方式三:半自动创建


# 可扩展性高,并且能够符合orm查询

class Book(models.Model):
   name = models.CharField(max_length=32)
   # 第三种创建表的方式
   authors = models.ManyToManyField(to='Author', through='Book2Author', through_fields=('book', 'author'))
   # through 告诉 django orm 书籍表和作者表的多对多关系是通过 Book2Author 表来记录的
   # through fields 告诉 django orm 记录关系是用 Book2Author 表中的 book 字段 和 author字段 来记录的
   # 此关系在哪张表写的,through_fields中就优先写哪张表(那个字段)的小写
   # 但是,多对多字段的 add set remove clear 四个方法就用不了了

class Author(models.Model):
   name = models.CharField(max_length=32)

class Book2Author(models.Model):
   book = models.ForeignKey(to='Book')
   author = models.ForeignKey(to='Author')
   info = models.CharField(max_length=32)

来源:https://www.cnblogs.com/weiyiming007/p/12376062.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com