我正在使用googleappengine和django 1.0.2(以及django助手),想知道人们是如何进行递归删除的。 假设你有这样一个模型:
class Top(BaseModel): pass class Bottom(BaseModel): daddy = db.ReferenceProperty(Top)
现在,当我删除“Top”类型的对象时,我希望所有关联的“Bottom”对象也被删除。在
现在的情况是,当我删除一个“Top”对象时,“Bottom”对象会保留下来,然后我会得到不属于任何地方的数据。当访问视图中的数据存储时,我的结果是:
^{pr2}$我当然可以找到所有的对象并删除它们,但由于我的真实模型至少有5层深,我希望有一种方法可以确保这可以自动完成。在
我发现这个article是关于它如何与Java一起工作的,这似乎也是我想要的。在
有人知道我怎么在django也有这种行为吗?在
实际上这种行为是GAE特有的。Django的ORM在.DELETE()上模拟“ON DELETE CASCADE”。在
我知道这不是你问题的答案,但也许它能帮助你避免找错地方。在
您需要手动执行此操作,方法是查找受影响的记录,并在删除父记录的同时删除它们。如果您愿意,可以通过重写父类上的.delete()方法来自动删除所有相关记录来简化这一过程。在
出于性能原因,您几乎肯定希望使用仅限键查询(允许您获取要删除的实体的键,而不必获取和解码实际实体)和批删除。例如:
重新考虑数据结构。如果这种关系在记录的生命周期内永远不会改变,您可以使用GAE的“祖先”功能:
然后查询祖先=top将找到所有级别的所有记录。所以很容易删除它们。在
^{pr2}$相关问题 更多 >
编程相关推荐