Django ORM 多对多关系创建 - downtiser/python-one GitHub Wiki
Django创建多对多外键关系表
class Many_to_many(models.Model):
f1 = models.ForeignKey(to='Table1', to_field='id')
f2 = models.ForeignKey(to='Table2', to_field='id')
class Table1(models.Model):
t1 = models.charField(max_length=32)
class Table2(models.Model):
t2 = models.CharField(max_length=64)
f_key = models.ManyToManyField(to='Table1') #创建表时Django会自动创建第三张表来维护多对多关系,表名为Table2_f_key
- 方法一更好一些,可以自己定制第三张表, 方法二无法直接操作第三张表
- 方法二操作第三张表:
- 添加记录:
obj = models.Table2.objects.get(id=1) # 确定记录的Table2_id一列的值为1
obj.f_key.add(2) # 表示往第三张表中添加一条记录,关联Table2的id为1和Table1的id为2的记录
obj.f_key.add(*[1, 2, 3, 4]) # 表示添加 1-1, 1-2, 1-3, 1-4这样的四条记录
obj.f_key.remove(2) # 表示移除1-2这样的一条记录
obj.f_key.remove(*[1,2,3,4]) # 表示移除类似的四条记录
obj.f_key.clear() # 表示清除所有和这个对象相关联的记录
- 修改记录:obj.f_key.set([3,5,7]) # 表示将跟1有关的记录替换为1-3, 1-5, 1-7, 数据库中和1有关的记录只剩下这些
- 获取记录:obj.f_key.all() obj.f_key.filter() obj.f_key.filter()f.irst(), 注意,拿到的都是与之关联的表的对象,而不是第三张表的对象