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

Ale*_*tic 8 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
Run Code Online (Sandbox Code Playgroud)

结果objs == item_list

这是什么意思?

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

Sha*_*ang 13

引用django doc:

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

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


Dan*_*mes 10

从 Django 1.10文档开始:

\n\n
\n

如果 model\xe2\x80\x99s 主键是 an ,则AutoField它不会检索和设置主键属性,save()除非数据库后端支持它(当前是 PostgreSQL)

\n
\n\n

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

\n