【发布时间】:2013-08-07 04:00:12
【问题描述】:
我有一个 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()。)
更新
尽管这个问题主要是学术性的,并且与我不再从事的项目有关,但我想更新这个问题,以防有人通过 Google 发现这个问题。以下来自django-mptt documentation:
要获取所有这些页面标题,您可以执行以下操作:
titles = [] while page: titles.append(page.title) page = page.parent每个页面都有一个数据库查询...
即使对于小型项目,Django-mptt 的效率也要高得多,即使在这种情况下,我也应该使用它。
【问题讨论】:
标签: django django-models