我有一个 Django 模型,它带有一个可以为“自我”的外键。我有兴趣在递归深度上引入一个硬限制(比如 10)。哪里是检查这个的合适的地方,我应该在那里抛出什么样的异常?
我的意思的伪示例:
def limit_recursion_depth(self):
depth = 0
model = self
while model.parent is not None:
depth += 1
model = model.parent
if depth > 10:
pass # Complain here and stop processing
else:
pass # Return the model, save, whatever is normal
我对覆盖模型的 save() 方法之类的解决方案比任何仅适用于管理员的验证更感兴趣。(例如,我希望能够验证 Model.objects.create()。)
更新
尽管这个问题主要是学术性的,并且与我不再追求的项目有关,但我想更新这个问题,以防有人通过谷歌发现这个问题。以下来自django-mptt 文档:
要获取所有这些页面标题,您可以执行以下操作:
titles = [] while page: titles.append(page.title) page = page.parent
这是每一页的一个数据库查询......
即使对于小型项目,Django-mptt 的效率也要高得多,即使在这种情况下,我也可能应该使用它。