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

多对多的三种创建方式

# 全自动:就是利用orm自动帮你创建第三张表关系
	"""
	优点:第三张关系表的代码不需要自己写还支持orm操作第三张表关系
	缺点:第三张表关系扩展性很差(没办法创建额外的字段)
	"""
    
# 纯手动
	就是自己创建第三张关系表
    """
    优点:第三张表完全取决于你自己的额外的扩展
    缺点:需要手写的代码多 而且不支持orm提供的简单方法操作第三张表,所以不推荐
    """
    
# 半自动
class Book(models.Models):
    name = models.CharField(max_length=32)
    authors = models.ManyToManyField(to='Author',
                                     through='Book2Author',  # 第三张关系表名
                                     through_field=('book','author') # 关联表名的字段)
                                     class Author(models.Model):
    name = models.CharField(max_length=32)
    # books = models.ManyToManyField(to='Book',
    #                                  through='Book2Author',
    #                                  through_fields=('author','book')
    #                                  )
class Book2Author(models.Model):
    book = models.ForeignKey(to='Book')
    author = models.ForeignKey(to='Author')

"""
在ManyToManyField字段里面加两个参数参数through="关联表名"  through_fields=('book','author')  关联表第三张表的字段
	through_fields字段先后顺序的判断
		判断本质
			通过第第三张表查询对应的表 需要用到那个字段就将那个字段放在前面
			或者当前表是谁  就把对应的关联字段放在前面
			
# 半自动:可以使用orm的正反向查询 但是无法使用add、set、remove、clear
"""
 # 总结:在平常测试的时候用全自动扩展性低  而在写项目的时候用半自动 扩展性高
上一篇:android – Mobile Vision API BarcodeDetector仅在屏幕*检测到


下一篇:递归把path字符串构造成递归数组