这是我的穿透表的样子:
class ThroughTable(models.Model):
user = models.ForeignKey(User)
society = models.ForeignKey(Society)
我得到2个列表,其中包含2个模型对象的ID,这些ID必须添加到我的穿透表中。
user_list = [1,2,5,6,9]
society_list = [1,2,3,4]
在这里,我想为这2个列表中的每个可能的对在“通过”表中创建条目。
我当时正在考虑使用嵌套循环在“通过”表中迭代和创建对象,但这似乎很幼稚,并且复杂度为n * n。
是否有更好的方法来解决此问题?
答案 0 :(得分:0)
Django提供了bulk_create()方法在数据库中进行输入。它具有可选的参数 batch_size ,因为如果您有数百万条记录,则无法一次性输入所有记录,因此请批量打破记录并输入数据库。
ThroughTable.objects.bulk_create(item, batch_size)
答案 1 :(得分:0)
来自CLI:
bulk_create(objs,batch_size = None,ignore_conflicts = False)
此方法以一种有效的方式将提供的对象列表插入数据库>(通常只有1个查询,无论有多少个对象):
对于您的情况,首先创建一个包含所有可能组合的列表,然后保存。
items = []
for user, society in user_list:
for society in society_list:
item = ThroughTable(user=user, society=society)
items.append(item)
ThroughTable.objects.bulk_create(items)