Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何删除django reverse-OneToOne关系,然后重用模型实例?_Python_Django_Django Models_Django Queryset - Fatal编程技术网

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