我在数据库中保存了两个对象实例:
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
)中分配了不同的对象,我也从未明确分配过{{1} }。之所以发生这种情况,是因为Django在创建temp2
时会遵循某种关系,并在temp2
上隐式设置属性。我知道我可以通过调用来“恢复”正确的状态
obj
但这是对性能的打击。创建obj = Object.objects.get(pk=obj.pk)
和obj
时,我也可以传递temp1
的副本,但是复制也很昂贵。
所以问题是:如何防止Django(1.11)将temp2
的未保存实例分配给Temporary
字段?