禁用Django对未保存对象的向后关系的自动分配

时间:2019-07-18 20:40:46

标签: 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)中分配了不同的对象,我也从未明确分配过{{1} }。之所以发生这种情况,是因为Django在创建temp2时会遵循某种关系,并在temp2上隐式设置属性。我知道我可以通过调用来“恢复”正确的状态

obj

但这是对性能的打击。创建obj = Object.objects.get(pk=obj.pk) obj时,我也可以传递temp1的副本,但是复制也很昂贵。

所以问题是:如何防止Django(1.11)将temp2未保存实例分配给Temporary字段?

0 个答案:

没有答案