Django谷歌应用引擎参考问题

时间:2010-09-21 09:37:01

标签: python django google-app-engine django-models google-cloud-datastore

我正在研究Django和谷歌应用程序引擎上的应用程序。在我的应用程序中,我有几个带有几个ReferenceProperty字段的模型。问题是如果任何ReferenceProperty字段被删除,它会在使用它的所有其他模型中产生与ReferenceProperty相关的错误。我想要的是,当一个字段被删除时,如果删除了一个用户,那么所有具有User作为ReferenceProperty的字段仍然应该没有任何错误消息显示相关用户不可用或类似的东西。

有人可以建议如何做到这一点吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

您也可以在要删除的实体上设置一个标记,例如deleted,然后将其保留在数据存储区中。这样做的好处是首先避免了所有引用完整性问题,但它的代价是两个主要缺点:

  1. 需要更改所有现有查询以处理具有deleted属性集的实体,方法是从结果集中省略它们,或者以某种方式特殊地对它们进行包装。
  2. “已删除”数据保留在数据存储区中;这可能会使数据存储膨胀,也可能不是敏感信息的选项。
  3. 这根本不能解决你的问题,但我认为为了完整起见我会提到它。

答案 1 :(得分:0)

当我遇到同样的问题时,我找不到一般的解决方案。我发现的唯一方法是尝试/除了每个引用属性。如果你在这里找到另一个答案。

答案 2 :(得分:0)

两种可能的解决方案:

  • 在您访问之前检查引用是否仍然存在:

    如果不是obj.reference:
     #Referenced entity已被删除

  • 删除可能引用的模型对象时,查询可能引用它的所有模型,并将其引用属性设置为None。