【问题标题】: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 了解更多我的意思,见下图)


请问有其他解决方案吗?为什么那个解决方案更好?

【问题讨论】:

  • @ShangWang 感谢您的建议,这与 select2 替代方案非常相似。我刚刚将它添加到解决方案1 ​​选项中。
  • 我的意思是你可能不需要任何异步的东西。您是否有太多选择以致页面开始加载缓慢?如果不是,那么我不知道您为什么犹豫选择其中一种纯前端实现来使 UX 更易于使用。
  • 通常情况下,ModelChoiceField 会发生这种情况,因为选择来自特定模型,查询集结果可能会达到 10000 多个选择。而且我们不会在视图渲染期间加载整个选项,因为它太多了。

标签: django forms drop-down-menu django-forms html-select


【解决方案1】:

我在我的 UX 中使用了前一页,其中包含可以搜索和分页数据的选项列表,然后用户从列表中选择一个项目以重定向到另一个页面,该页面在用上一个列表中选择的项目填充的表单。

【讨论】:

  • 你的努力在哪里。
猜你喜欢
  • 2014-08-08
  • 2016-06-03
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 2011-02-13
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多