为什么django bulk_create返回没有pk的对象?

时间:2015-11-11 15:18:06

标签: django

为什么django bulk_create返回没有pk的对象?

In [1]: item_list = [Model(title=str(i)) for i in range(10)]
In [2]: objs = Model.objects.bulk_create(item_list)
In [3]: print(objs[0].pk)
None

结果objs == item_list

这是什么意思?

我的意思是,这个方法可以返回操作的结果(True或False,或其他一些),而不是我已经拥有的这些无用的对象集合。

2 个答案:

答案 0 :(得分:9)

引用django doc

  

如果模型的主键是AutoField,则它不会检索和   设置主键属性,如save()那样。

根据django,它一次创建了一个数据库记录列表,但是没有检索到对象的id。我认为这对你进行大量插入而不进一步处理数据的情况很有用。

答案 1 :(得分:0)

从Django 1.10 docs开始:

  

如果模型的主键是AutoField,则它不会像save()那样检索和设置主键属性,除非数据库后端支持它(当前是PostgreSQL) >。

因此,如果您使用的是Django 1.10+,并且没有返回主键,那是因为只有PostgreSQL支持它。