📜  manytomany django add bulk create - Python (1)

📅  最后修改于: 2023-12-03 15:32:48.811000             🧑  作者: Mango

操作多对多关系

在Django中,多对多的关系是一种非常强大的关系类型。它允许多个对象通过对方来关联,并且在任意一侧都能够添加或删除这些关系。

本文将介绍如何在Django中操作多对多关系,包括添加、删除关系以及批量创建关系。

添加关系

要添加多对多关系,只需使用模型实例的add方法即可。

# 关联两个对象
person.tag_set.add(tag)

# 关联多个对象
person.tag_set.add(tag1, tag2, tag3)

你也可以使用主键或查询集来指定需要关联的对象。

# 通过主键关联
person.tag_set.add(1, 2, 3)

# 通过查询集关联
tags = Tag.objects.filter(name__in=['tag1', 'tag2', 'tag3'])
person.tag_set.add(*tags)

请注意,add方法只会添加唯一的关系,如果尝试添加重复的关系则会被忽略。如果你想要强制添加关系,可以使用set方法。

# 强制添加关系
person.tag_set.set([tag1, tag2, tag3])
删除关系

在Django中,也可以使用remove方法来删除多对多关系。

# 删除某个对象的关联
person.tag_set.remove(tag)

# 删除多个对象的关联
person.tag_set.remove(tag1, tag2, tag3)

add方法类似,remove方法也可以通过主键或查询集来删除关联。

# 通过主键删除关联
person.tag_set.remove(1, 2, 3)

# 通过查询集删除关联
tags = Tag.objects.filter(name__in=['tag1', 'tag2', 'tag3'])
person.tag_set.remove(*tags)

可以通过clear方法删除某个对象的所有关联。

# 删除所有关联
person.tag_set.clear()
批量创建关系

在Django 2.2+中,你可以使用add方法的拓展版本add(*objs, bulk=True)来进行批量添加多对多关系。这个方法的作用是在一次查询中添加多个关系。

# 批量创建多对多关系
person.tag_set.add(*tags, bulk=True)

需要注意的是,使用bulk=True要比多次调用add方法更高效。但是,你只能指定需要添加的关系,无法额外设置中间表的字段。如果你需要设置额外的字段,应该使用普通的add方法来逐个添加关系。

至此,我们已经介绍了如何在Django中添加、删除多对多关系以及如何批量创建这些关系。希望这篇文章能对你有所帮助!