今天我发现了一些非常棘手的事情。我使用 django 1.7.7(如果这很重要)。
我有两个相关模型:Car
和 Driver
。我想连接汽车对象和驾驶员对象的彼此实例。这两个对象似乎(*)已经创建。
在这两种情况下:
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
(*) - 老实说,我不确定这些对象是否已完全创建。一切都在 View 中进行,两个对象都已经拥有自己的 id,但是对数据库的手动查询显示,这些对象尚不存在。交易未完成?
最佳答案
因为在您的示例代码中,第一个 self.object.car 与您在下面的行中保存的对象不同。看看这个:
self.garage.car is self.garage.car
如果上述为 False,唯一的解释是 car 是一个属性,每次调用此属性时都会获得对象的新实例。
关于python - 当通过子属性引用它们时,Django ORM 不会保存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30732546/