ManyToMany参数(through,db_constraint)

through : 指定自己写好的第三张表,我们可以给第三张表添加字段了(告诉Django不用建第三张表了,我们都给他配好了)

class Book(models.Model):
    name=models.CharField(max_length=20)
    authors=models.ManyToMany('Author',through='Score')


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


class Score(models.Model):
    book=models.ForeignKey('Book')
    author=models.ForeignKey('Author')
    socre=models.IntegerField()

如果只写manytomany,那么第三张是Django替我们建的,可以通过book.authors字段进行一系列操作(add(增),all(查),set(重置),remove(删除)),但是此时没法给第三张表加其他我们需要的字段,

而如果不写,ManyToMany字段,那么我们可以通过Score来执行一些操作,但是此时book和author表已经没有直接的联系了,查询起来很繁琐

有了authors=models.ManyToMany('Author',through='Score'),那么就既可以方便查,也方便业务,添加需要的字段

db_constraint : 

db_constraint=False,这个就是保留跨表查询的便利(双下划线跨表查询```),但是不用约束字段了,一半公司都用false,这样就省的报错,因为没有了约束(Field字段对象,既约束,又建立表与表之间的关系)


limit_choices_to
限制关联字段的对象范围


related_name
反向查询字段可以不用 表名小写,可以改名了

db_table
第三张表的名字



原文地址:https://www.cnblogs.com/amber-liu/p/10005969.html