为什么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,或其他一些),而不是我已经拥有的这些无用的对象集合。
答案 0 :(得分:9)
引用django doc:
如果模型的主键是AutoField,则它不会检索和 设置主键属性,如save()那样。
根据django,它一次创建了一个数据库记录列表,但是没有检索到对象的id。我认为这对你进行大量插入而不进一步处理数据的情况很有用。
答案 1 :(得分:0)
从Django 1.10 docs开始:
如果模型的主键是
AutoField
,则它不会像save()
那样检索和设置主键属性,除非数据库后端支持它(当前是PostgreSQL) >。
因此,如果您使用的是Django 1.10+,并且没有返回主键,那是因为只有PostgreSQL支持它。