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

时间:2015-08-19 09:55:30

标签: python django django-models django-queryset

说我有这些模型:

class MyModel(models.Model):
    pass

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

如果此处的obj类型为MyModel,我如何删除onetoone以便我可以使用hasattr - 稍后检查以查找该邮件不存在了吗? 还有其他方法可以找出onetoone已被删除吗?

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

2 个答案:

答案 0 :(得分:0)

hasattr将始终返回True,即使您从未创建过关系。在这里使用是不对的。

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

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

答案 1 :(得分:0)

调用相关实例的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