python - 具有数千个选择的 Django 选择字段创建数以千计的数据库查询

标签 python sql django

我有两个模型,模型 B 和模型 C,它们都扩展了模型 A。

在一个表单中,我有一个模型 A 的模型选择字段 - 这显然加载了模型 B 和 C 的所有实例,这是我的意图。

所以这个下拉列表有超过 1000 个“A 对象”。我正在使用 hasattr() 来确定它们是 B 还是 C,然后使用这些类中的 unicode 方法在下拉列表中以字符串形式显示对象。

这会创建数千个 SQL 查询,大约需要一分钟的时间来处理。现在我的解决方案是查询数据库 3 次(以获取所有 A、B 和 C 对象,然后遍历 A 并确定每个对象是否属于 B 或 C 类型,并将正确的 unicode 字符串插入使用的列表中在下拉列表中。然后我清理数据并在保存表单时选择正确的对象。这就是 hackey(对我来说)。

我想知道当该模型是其他模型的基础模型时,是否有人知道用数千个模型对象选项填充下拉列表的有效方法。

干杯, 院长

最佳答案

unicode gets a field from these other models (self.foreign_key_field.field_to_print_out).

这是进行其他查询的地方,而不是来自对 unicode 的调用或检查它是 a b 还是 a c。

如果您的 unicode 方法仅引用本地字段,这就不是问题,但正如您所注意到的,需要连接的字段不会自动完成,以节省一些甚至可能不需要的事情的性能。

如果你使用 django-debug-toolbar,你应该注意到 1000 个查询是相关对象的检索,而不是对象列表。

是的,正如您所指出的,select_related 在这里会有所帮助,因为这是您告诉 django 您确实需要这些字段。

关于python - 具有数千个选择的 Django 选择字段创建数以千计的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783198/

相关文章:

python - 如何在 for 循环中使 turtle 向上然后向下移动?

python - 比较 2 个列表并将索引和值返回给第三个列表

python - 带有使用管理器方法的自定义查询集的 Django Prefetch

python - 未找到 :/products/images/DSroadmap. png 未找到 :/products/images/codewall. jpg [2020 年 1 月 26 日 22:13:36]

python - Pandas 使用其他不规则时间列表对不规则时间序列进行重新采样和插值

sql - Oracle SQL : Calculate value using previous row

mysql - 如何从表列中删除空值?

mysql - 我的 group_concat SQL 查询有什么问题?

c# - 使用 HttpClient 通过 HTTP POST windows phone 8.1 上传图像和字符串

python - Kivy:从 python 代码更改屏幕