对于大量选择,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,但使用自定义小部件,例如select2chosenreact-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 参数

App 适用于 ModelChoiceField 但不适用于 ModelMultipleChoiceField

通过覆盖 ModelForm 和 ModelChoiceField 连接两个模型的值