Python 如何删除django reverse-OneToOne关系,然后重用模型实例?
假设我有这些模型:Python 如何删除django reverse-OneToOne关系,然后重用模型实例?,python,django,django-models,django-queryset,Python,Django,Django Models,Django Queryset,假设我有这些模型: class MyModel(models.Model): pass class OtherModel(models.Model): onetoone = OneToOneField(MyModel) 如果此处的obj类型为MyModel,我如何删除onetoone,以便我可以使用hasattr-稍后检查以确定onetoone不再存在? 是否有其他方法可以发现onetoone已被删除 obj.onetoone.delete() hasattr(obj, "o
class MyModel(models.Model):
pass
class OtherModel(models.Model):
onetoone = OneToOneField(MyModel)
如果此处的obj
类型为MyModel
,我如何删除onetoone
,以便我可以使用hasattr
-稍后检查以确定onetoone不再存在?
是否有其他方法可以发现onetoone
已被删除
obj.onetoone.delete()
hasattr(obj, "onetoone") # This still returns True, but actually it should return False
hasattr
将始终返回True,即使您从未创建过关系。在这里使用它是不对的
相反,您需要检查是否存在相关对象
try:
obj.onetoone
except OtherModel.DoesNotExist:
print("does not exist")
从相关实例的\u db调用
refresh\u应该可以。您可以通过覆盖从属模型的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
你想在这里实现什么?您正在尝试删除关系吗?是的,我想删除关系并删除相关对象。之后,我希望检查返回False。然而,这里的第一个答案是可以使用hasattr
: