对于大量选择,ModelChoiceField 都有哪些替代方法?
Posted
技术标签:
【中文标题】对于大量选择,ModelChoiceField 都有哪些替代方法?【英文标题】:What are some alternative for ModelChoiceField for large number of choices? [closed]对于大量选择,ModelChoiceField 有哪些替代方法? 【发布时间】: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 了解更多我的意思,见下图)
请问有其他解决方案吗?为什么那个解决方案更好?
【问题讨论】:
纯前端:harvesthq.github.io/chosen @ShangWang 感谢您的建议,这与 select2 替代方案非常相似。我刚刚将它添加到解决方案1 选项中。 我的意思是你可能不需要任何异步的东西。您是否有太多选择以致页面开始加载缓慢?如果不是,那么我不知道您为什么犹豫选择其中一种纯前端实现来使 UX 更易于使用。 通常情况下,ModelChoiceField 会发生这种情况,因为选择来自特定模型,查询集结果可能会达到 10000 多个选择。而且我们不会在视图渲染期间加载整个选项,因为它太多了。 devbridge.com/sourcery/components/jquery-autocomplete 【参考方案1】:我在我的 UX 中使用了前一页,其中包含可以搜索和分页数据的选项列表,然后用户从列表中选择一个项目以重定向到另一个页面,该页面在用上一个列表中选择的项目填充的表单。
【讨论】:
你的努力在哪里。以上是关于对于大量选择,ModelChoiceField 都有哪些替代方法?的主要内容,如果未能解决你的问题,请参考以下文章
ModelChoiceField 给出“选择一个有效的选择”,用 ajax 调用填充选择
如何从 Django ModelChoiceField 查询集中选择值和标签
Django ModelChoiceField - 通过 JQuery 选择选项而不删除选项
使用 Django 使用 ModelChoiceField 和 queryset 参数