如何删除 django 反向 OneToOne-Relation 然后重用模型实例?

How can I delete a django reverse OneToOne-Relation and then reuse the model instance?

假设我有这些模型:

class MyModel(models.Model):
    pass

class OtherModel(models.Model):
    onetoone = OneToOneField(MyModel)

如果这里的 objMyModel 类型,那么我如何删除 onetoone 以便我可以使用 hasattr-稍后检查以找出onetoone 不存在了? 有没有其他方法可以发现 onetoone 已被删除?

obj.onetoone.delete()
hasattr(obj, "onetoone")  # This still returns True, but actually it should return False

hasattr 将始终 return 正确,即使您一开始从未建立关系。用在这里是不对的。

相反,您需要检查是否有相关对象。

try:
    obj.onetoone
except OtherModel.DoesNotExist:
    print("does not exist")

调用相关实例的refresh_from_db应该可以。您可以通过覆盖依赖模型的 delete 使其透明。

class OtherModel(models.Model):
    onetoone = OneToOneField(MyModel)

    def delete(self, using=None, keep_parents=False):
        result = self.delete(using, keep_parents)
        self.onetoone.refresh_from_db()
        return result