我有一个Django系统,定期为成千上万的客户运行计费。这是我的模特:
moment
运行结算时,使用多个嵌套.ts
循环创建数千个具有数十个事务的发票,这些循环会触发每个已创建记录的插入。我可以针对每张单独的帐单运行class Invoice(models.Model):
balance = models.DecimalField(
max_digits=6,
decimal_places=2,
)
class Transaction(models.Model):
amount = models.DecimalField(
max_digits=6,
decimal_places=2,
)
invoice = models.ForeignKey(
Invoice,
on_delete=models.CASCADE,
related_name='invoices',
null=False
)
,但这仍会导致数千次调用for
。
如何批量创建数千个相关模型,以便维持关系并以最有效的方式使用数据库?
注意:
答案 0 :(得分:3)
您可以bulk_create
所有Invoice
个对象,从数据库中刷新它们,以便它们都有ID,为所有发票创建Transaction
个对象,然后保存它们bulk_create
。所有这些都可以在单个transaction.atomic
上下文中完成。
另外,特别是对于django 1.10和postrgres,请看这个answer。