如何删除 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)
如果这里的 obj
是 MyModel
类型,那么我如何删除 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
假设我有这些模型:
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
将始终 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