【问题标题】:Why does Django bulk_create return objects without pk?为什么 Django bulk_create 返回没有 pk 的对象?
【发布时间】:2016-02-12 17:28:24
【问题描述】:

为什么 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,或其他东西),而不是我已经拥有的这个无用的对象集合。

【问题讨论】:

  • 运行 Django 2.2 这个问题仍然存在
  • 和 Django 3.2...

标签: django django-orm


【解决方案1】:

截至 Django 1.10 docs:

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

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

【讨论】:

    【解决方案2】:

    引用djangodoc

    如果模型的主键是 AutoField,它不会检索并且 设置主键属性,就像 save() 一样。

    根据django,它会一次性创建一个数据库记录列表,但不会检索对象的ID。我认为这适用于无需进一步处理数据就进行大量插入的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 2015-11-17
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多