【问题标题】:How can I delete a django reverse OneToOne-Relation and then reuse the model instance?如何删除 django 反向 OneToOne-Relation 然后重用模型实例?
【发布时间】:2015-11-12 13:26:00
【问题描述】:

假设我有这些模型:

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

【问题讨论】:

  • 你想在这里实现什么?你想解除关系吗?
  • 是的,我想删除关系并删除相关对象。之后,我希望支票返回 False。

标签: python django django-models django-queryset


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2013-01-07
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 2016-12-12
    • 2016-12-13
    相关资源
    最近更新 更多