表结构设计
多对多关系表创建外键,典型例子:书--作者--出版社,书与作者的关系就可以看作是多对多关系。
# 表结构设计 class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForeignKey('Publisher', on_delete=models.CASCADE) #与出版社之间建立多对一外键 class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField('Book') # 描述多对多的关系 不生成字段 生成关系表
数据迁移
如果是在新的app中进行功能的设计,可以使用 python manage.py makemigrations app(应用名) 进行数据的迁移,数据迁移完之后会生成三张表,这是情理之中的事,因为多对多关系的两张表要建立连接的时,需要借助第三张表来维护二者的关系,这里会自动生成第三张表,如图:
【新建测试表结构】
1 from django.db import models 2 3 # Create your models here. 4 class Publisher(models.Model): 5 name = models.CharField(max_length=32) 6 city = models.CharField(max_length=32) 7 8 def __str__(self): 9 return "<Publisher object: {} {}>".format(self.id, self.name) 10 11 class Author(models.Model): 12 name = models.CharField(max_length=32) 13 age = models.IntegerField() 14 phone = models.CharField(max_length=11) 15 16 def __str__(self): 17 return "<Author object: {} {}>".format(self.id, self.name) 18 19 class Book(models.Model): 20 title = models.CharField(max_length=32) 21 publish_date = models.DateField(auto_now_add=True) 22 price = models.DecimalField(max_digits=5, decimal_places=2) 23 memo = models.TextField(null=True) 24 # 创建外键,关联publish 25 publisher = models.ForeignKey(to="Publisher",null=True, on_delete=models.CASCADE) 26 # 创建多对多关联author 27 author = models.ManyToManyField(to="Author") 28 29 def __str__(self): 30 return "<Book object: {} {} {} {}>".format(self.id, self.title,self.price,self.author)
新建表结构
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django-ORM之ManyToManyField的使用-多对多关系 - Python技术站