Django ORM 在通过 child 属性引用它们时不保存值
Django ORM doesn't save value when referencing to them by child attributes
今天我发现了一件非常棘手的事情。我使用 django 1.7.7(如果这很重要)。
我有两个相关模型:Car
和 Driver
。我想相互连接汽车 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
如果以上为假,唯一的解释是汽车是 属性 并且每次调用此 属性.
时都会获得对象的新实例
今天我发现了一件非常棘手的事情。我使用 django 1.7.7(如果这很重要)。
我有两个相关模型:Car
和 Driver
。我想相互连接汽车 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
如果以上为假,唯一的解释是汽车是 属性 并且每次调用此 属性.
时都会获得对象的新实例