Django:查询多条记录的最有效方法?

Posted

技术标签:

【中文标题】Django:查询多条记录的最有效方法?【英文标题】:Django: most efficient way to query many records? 【发布时间】:2011-04-25 10:25:50 【问题描述】:

我有一张包含数千条记录(产品)的表。每个产品都有 4 个不同的类别:

CAT1 CAT2 CAT3 CAT4

我想知道是否有一种方法,或者最佳实践是什么,可以根据已选择的类别(使用 Ajax)动态检索可用类别。 示例:

如果CAT1 = green所有带有CAT1 = green的产品将有一系列CAT2类别等等。我想知道哪些产品与CAT1 = green 匹配的CAT2 CAT3 CAT4 类别。一旦我设置了一个值或CAT2,我想根据CAT1 && CAT2 值做同样的事情。

谢谢。

【问题讨论】:

试图理解您的问题 - 您想查找带有CAT1 = green 的对象有哪些类别?可能会添加一组产品样本,然后添加您想要的样本结果集。 你试过什么代码?这段代码有什么问题? 这些模型之间是否建立了任何关系?如果可以,请发布您的模型。 我在下面的回答中写下了一个简单的数据样本 我能问你一件事:如果你的产品属于五个类别,你会怎么做?您如何在系统中对其进行编码? 【参考方案1】:

这是一种通常称为“选择链”或“链式选择”的技术。

您可以为此使用一些相当简单的javascript,如How to limit choice field options based on another choice field in django admin的答案所示

您还可以使用预打包的解决方案,例如 django-smart-selects(通过django chain select 的 SO 回答找到)

【讨论】:

【参考方案2】:

感谢您的回复。链式选择仅部分起作用,因为我没有层次结构。 以下是数据示例:

PRODUCT 1
CAT1 = vegetables
CAT2 = heavy
CAT3 = green

PRODUCT 2
CAT1 = vegetable
CAT2 = light
CAT3 = red

PRODUCT 3
CAT1 = diary
CAT2 = heavy
CAT3 = red

在我的模板中,我想创建一个系统,这样当用户选择 CAT1 = vegetables 时,他们会看到 CAT2 选项重而轻,而如果他们选择 CAT1 = diaryCAT2 的唯一选项是重且轻以此类推。

我的方法是获取整个产品表的 json,并在选择类别后查找可用值......但是产品表包含数千个项目,我很确定它会减慢整个应用程序。 当您添加过滤功能 (list_filter) 时,管理页面中有类似的内容,因为它只显示其中包含一些条目的字段。

谢谢!

【讨论】:

如果您想更新您的问题,正确的做法是编辑问题本身,而不是提供答案。请考虑删除此答案并改为编辑问题本身。谢谢!

以上是关于Django:查询多条记录的最有效方法?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 将数千条记录插入 SQLite 表的有效方法是啥?

Django框架,查询多条记录报错

试图找到将 SQL Query 转换为具有大量记录的 Pandas DataFrame 的最有效方法

使用 Django + PostgreSQL 进行快速搜索

使用 Core Data 插入/更新记录的最有效方法?

Oracle中将查询出的多条记录的某个字段拼接成一个字符串的方法