python - Django一对一字段反向更新

标签 python django one-to-one

我在以一对一关系保存反向对象时遇到问题。根据 Django 文档,一旦使用 save() 方法( https://docs.djangoproject.com/en/1.9/topics/db/examples/one_to_one/ ),一切都会正常工作。

但是我的情况有所不同:

class A(models.Model):
    name = models.CharField(max_length=30)

class B(models.Model):
    name = models.CharField(max_length=30)
    aObject = models.OneToOneField(A, on_delete=models.SET_NULL, null=True, blank=True)

我首先创建多个 B 对象并将它们保存到数据库中。然后我创建多个 A 对象,将它们映射到相应的 B 对象。然后我使用bulk_create()保存A对象,最后使用save()保存修改后的B对象。

我收到错误:

ValueError: save() prohibited to prevent data loss due to unsaved related object 'aObject'.

似乎在 A 对象上使用bulk_create 不会执行 save() 会执行的一些操作。

我该如何解决这个问题? (出于性能原因,我需要使用bulk_create)

谢谢

最佳答案

当您使用bulk_create时,Django不会获取新对象的主键。因此,无法将新对象用作一对一字段、多对多字段或外键的值。

Django 1.10 将支持为 PostgreSQL 使用 bulk_create() 创建的对象设置主键。在那之前,对于其他数据库后端,恐怕你运气不好。

参见the docs了解更多信息。

关于python - Django一对一字段反向更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36082136/

相关文章:

python - 做Python喜欢 Camel

django - 无法为 API 设置 'rest_framework_jwt.authentication.JSONWebTokenAuthentication' 导入 'DEFAULT_AUTHENTICATION_CLASSES'

java - 我怎样才能加入 3 个实体 JPA?

python - 一对一字段 Django Admin

Golang Gorm 一对多与 has-one

c++ - 如何读取Windows.edb文件?

python - 如何训练基于三元组数组的模型

python - 使用 Pandas 根据另一列的值选择一列

django - elasticsearch.exceptions.RequestError:[name_complete]的映射定义具有不受支持的参数:[payloads:true]

django - 是否可以在不更改项目级别的任何内容的情况下为 Django 应用程序包含自定义 404 View ?