从django bulk_create中选择/查询对象?

时间:2012-05-29 12:35:18

标签: python django model save

如果我使用bulk_create插入对象:

objList = [a, b, c,] #none are saved
model.objects.bulk_create(objList)

不会更新对象的ID(请参阅https://docs.djangoproject.com/en/dev/ref/models/querysets/#bulk-create)。 所以我不能将这些人用作外键对象。我想在批量创建之后从数据库中查询它们然后将它们用作外键对象,但是我没有它们的ID来查询它们。如何从数据库中查询这些对象(假设除了id之外的列中可能存在重复值)?或者有更好的方法将批量创建的项目作为外键吗?

1 个答案:

答案 0 :(得分:1)

如果你只有三个对象,就像在你的例子中一样,你可能想要单独调用save,在事务中包含调用,如果它需要是原子的。

如果还有更多,这可能是使用bulk_create的原因,那么您可能会循环遍历它们并在每个上调用save。同样,如果需要,您可以将其包装在事务中。虽然,有人可能不喜欢这个选项,因为运行大量的插入查询可能会成为某些数据库设置的问题。

或者,hack将为对象添加一些已知的唯一标识符,以便您可以在保存后重新查询这些标识符。