Django一对一字段反向更新

时间:2016-03-18 10:36:44

标签: python django one-to-one

我遇到了以一对一关系保存反向对象的问题。根据Django doc,一旦你使用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)

谢谢

1 个答案:

答案 0 :(得分:2)

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

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

有关详细信息,请参阅the docs