Django ORM 在通过 child 属性引用它们时不保存值

Django ORM doesn't save value when referencing to them by child attributes

今天我发现了一件非常棘手的事情。我使用 django 1.7.7(如果这很重要)。

我有两个相关模型:CarDriver。我想相互连接汽车 object 和 driver object 的实例。两个 objects 似乎(*)都已经创建了。

在这两种情况下:

car = Car.objects.create()
car.save()
driver = Driver.objects.create()
driver.save()

self.garage.car = car
self.garage.save()

下一个:

# doesn't work
self.garage.car.driver = driver
self.garage.car.save()
# self.object.car.driver is None

但是:

# works
car = self.garage.car
car.driver = driver
car.save()
# self.object.car.driver is driver

(*) - 老实说,我不确定这些 object 是否已完全创建。视图中的一切都在进行,两个 object 都已经拥有 id,但是手动查询数据库显示,那些 object 还不存在。交易未完成?

因为在您的示例代码中,第一个 self.object.car 与您在下面的行中保存的对象不同。看看这个:

self.garage.car is self.garage.car

如果以上为假,唯一的解释是汽车是 属性 并且每次调用此 属性.

时都会获得对象的新实例