如何批量创建自关联ManyToManyField的关联对象?
Django自关联多对多关系批量创建方法
现有模型定义:
class MyTable(Model): close = ManyToManyField("MyTable")
问题
如何批量创建这种自关联多对多关系的对象?
非自关联场景的参考代码
对于普通非自关联的多对多表,批量创建关联的代码如下:
db_payload = [MyTable.close.through(tablea_id=x, tableb_id=y) for x,y in some_obj_list] MyTable.close.through.objects.bulk_create(db_payload)
自关联场景的解决方案
自关联多对多的中间表字段名是Django自动生成的,规则为[多对多字段名]_from和[多对多字段名]_to。对应到这个例子里,就是close_from_id和close_to_id。
因此批量创建自关联关系的代码应为:
db_payload = [MyTable.close.through(close_from_id=x, close_to_id=y) for x,y in some_obj_list] MyTable.close.through.objects.bulk_create(db_payload)
如果不确定具体字段名,可以通过以下方式确认:
- 查看数据库中生成的中间表结构
- 在Django Shell中执行
print(MyTable.close.through._meta.fields),从输出的字段列表中找到对应的关联字段
内容的提问来源于stack exchange,提问作者vahvero
相关产品推荐
相关产品推荐

