如何在Django中优化自引用模型中相关记录的检索?

2024-09-30 07:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从模型创建窗体。此表单包含一个类别。类别模型是一个自引用模型。我想在表单上的下拉列表中显示类别,这样它们也可以显示它们的父类别。也就是说

parentcat3 > parentcat2 > parentcat1 > leafcategory

最后一个类别用leafCategory=True表示。在

我已经重写了我的模型表单,只选择叶(结束)类别的记录使用

self.fields['primaryCategory'].queryset = Category.objects.exclude(leafCategory=False)

然后ModelForm下拉列表使用来自模型中__unicode__的返回值,即

getFullPathString()

这将返回“树”以查找父类别。这是慢的部分(有10000个类别)

如何优化父记录的检索?在

以下是我使用的代码:

型号

^{pr2}$

形式

class InventoryForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super(InventoryForm, self).__init__(*args, **kwargs)
        self.fields['primaryCategory'].queryset = Category.objects.exclude(leafCategory=False)

Tags: 模型selffalse表单fields列表objects记录
1条回答
网友
1楼 · 发布于 2024-09-30 07:22:56

这段代码效率极低。它将为每个类别以及每个类别的祖先执行一系列新的数据库查询。在

您需要研究在数据库中存储和检索这类分层数据的优化算法。django-mptt是我最喜欢的。在

另外,在列表的开头重复插入元素也是低效的。列表是为附加而优化的,而不是为插入而优化的。为两端添加而优化的数据结构是Python的collections模块中的deque,但是更好的解决方案可能是简单地追加元素,然后在返回之前调用列表中的reverse()。在

相关问题 更多 >

    热门问题