gpt4 book ai didi

django - 限制 Django 模型中的递归外键深度

转载 作者:行者123 更新时间:2023-12-04 04:46:31 24 4
gpt4 key购买 nike

我有一个 Django 模型,它的外键可以为“self”。我有兴趣在递归深度上引入硬限制(例如 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 documentation :

To get all those page titles you might do something like this:

titles = []
while page:
titles.append(page.title)
page = page.parent

That’s one database query for each page...



即使对于小型项目,Django-mptt 也更高效,即使在这种情况下我也可能应该使用它。

最佳答案

也许是这样的?

def save(self, *args, **kwargs):
if Foo.objects.filter(foo=self.foo).count() > 10:
raise Exception("not more than 10")
else:
super(Foo, self).save(*args, **kwargs)

更新:

对于 self带有 django-mptt 的引用字段你可以做这样的事情:
def save(self, *args, **kwargs):
if Foo.objects.filter(foo=self.foo).get_descendant_count() > 10:
raise Exception("not more than 10")
else:
super(Foo, self).save(*args, **kwargs)

关于django - 限制 Django 模型中的递归外键深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094426/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com