Django选择具有数千种选择的字段,创建数千个数据库查询

时间:2017-01-21 18:54:16

标签: python sql django

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

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

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

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

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

干杯, 迪恩

1 个答案:

答案 0 :(得分:0)

  

unicode从这些其他模型中获取一个字段(self.foreign_key_field.field_to_print_out)。

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

如果您的unicode方法仅引用本地字段,这不会成为问题,但是您已经注意到需要连接的字段不会自动完成以保存甚至可能不需要的内容的某些性能。 / p>

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

所以是的,正如你已经指出的那样,[' let lines = getline(line('v'), line('.'))'] [' echo lines'] [' call append(line('.'), lines)'] 会有所帮助,因为这是你告诉django你确实需要这些字段。

相关问题