python - 禁用 Django 自动分配未保存对象的反向关系
问题描述
我有两个保存在数据库中的对象实例:
class Object:
pass
class Temporary:
relation = OneToOneField(Object, related_name='temporary')
obj = Object.objects.create()
the_only_correct_temp = Temporary.objects.create(relation=obj)
现在我想使用其他临时对象执行一些计算,这些对象永远不会保存到数据库中,但对于这些计算至关重要。所以我创建了它们:
temp1 = Temporary(relation=obj)
temp2 = Temporary(relation=obj)
请注意,我从不保存它们。现在,在执行上面的代码之后,obj.temporary
等于temp2
,即使它在数据库中分配了一个不同的对象(the_only_correct_temp
),我从来没有明确地分配temp2
给它。发生这种情况是因为 Django 在创建 时以某种方式遵循关系temp2
,并隐式设置属性 on obj
。我知道我可以通过调用“恢复”正确的状态
obj = Object.objects.get(pk=obj.pk)
但这是一个性能打击。我也可以obj
在创建temp1
and时传递 的副本temp2
,但是复制也很昂贵。
所以问题是:如何防止 Django (1.11) 将未保存的实例分配Temporary
给该obj.temporary
字段?
解决方案
推荐阅读
- powerbi - Microsoft PowerBI - 检查一个是否也是另一个
- reactjs - 反应路由器 dom 劫持我的图像/pdf/api 链接
- java - 在角度站点中使用 xpath 时找不到元素
- ios - 如何在 Xcode 控制台之外查看 NSLog
- html - 带有 iframe 的嵌入式网站中的 iOS 滚动问题
- git - TFS 资源管理器您正在访问敏感信息,您需要验证您的密码
- java - Grails 没有找到能够从 [java.lang.Long] 类型转换为 [User] 类型的转换器
- laravel - laravel 应用自动更新
- r - 查找数据框行之间的唯一值并替换它们(R)
- meteor - Meteor 1.6 Meteor.userId() 检查用户的可靠方法?