【发布时间】:2016-04-02 14:34:00
【问题描述】:
根据#17950关于ModelChoiceField允许选择单个模型对象,适合表示外键。
请注意,当条目数量增加时,ModelChoiceField 的默认小部件变得不切实际。您应该避免将其用于超过 100 个项目。
这很明显,因为从 Select 框中选择 100 个选项并不容易。必须向下滚动或找到选项。
如果有很多选择,有哪些可能的解决方案?
解决方案 1
仍然使用ModelChoiceField,但使用自定义小部件,例如select2、chosen、react-select 等...而不是Select 小部件。它可能有助于过滤选择。当用户键入选择框的输入时,将异步查询选项以分离 API 端点。
解决方案 2
Primitive,就是提供一个空白的CharField 和一个TextInput Widget。因此,用户必须手动输入值。
解决方案 3
通过提供一个列出所有选项的弹出窗口,可以进一步改进解决方案 2。用户可以搜索选项,单击选项后,窗口将关闭,表单将自动填充值。弹出窗口与 django 管理列表非常相似。 (结帐 Grappelli RelatedLookup 了解更多我的意思,见下图)
请问有其他解决方案吗?为什么那个解决方案更好?
【问题讨论】:
-
@ShangWang 感谢您的建议,这与 select2 替代方案非常相似。我刚刚将它添加到解决方案1 选项中。
-
我的意思是你可能不需要任何异步的东西。您是否有太多选择以致页面开始加载缓慢?如果不是,那么我不知道您为什么犹豫选择其中一种纯前端实现来使 UX 更易于使用。
-
通常情况下,ModelChoiceField 会发生这种情况,因为选择来自特定模型,查询集结果可能会达到 10000 多个选择。而且我们不会在视图渲染期间加载整个选项,因为它太多了。
标签: django forms drop-down-menu django-forms html-select