首页 > 解决方案 > 禁用 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在创建temp1and时传递 的副本temp2,但是复制也很昂贵。

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

标签: pythondjango

解决方案


推荐阅读