python - 当通过子属性引用它们时,Django ORM 不会保存值

标签 python django django-orm django-1.7

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

我有两个相关模型:CarDriver。我想连接汽车对象和驾驶员对象的彼此实例。这两个对象似乎(*)已经创建。

在这两种情况下:

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/

相关文章:

python - Django ManyToMany 默认所有值

django - 使用 Django 的 ORM 时什么时候会引发异常

Python OpenCV实时图像拼接(n=5)性能优化

python - Matplotlib 中 x 轴标签的频率和旋转

python - 有没有一种聪明的方法可以将我的脏代码从特定颜色更改为另一种颜色?

django 表单在 init 上而不是在元类中排除字段

python - gunicorn 状态处于事件状态(已退出)但显示未在 monit 中运行

database - django null 和空字符串

python - 通过计算在 django 中批量更新

python - 将数组的数组转换为 NumPy 的 ndarray of ndarrays