Django admin:将选定的相关字段框更改为自动完成

Posted

技术标签:

【中文标题】Django admin:将选定的相关字段框更改为自动完成【英文标题】:Django admin: Change selected box of related fields to autocomplete 【发布时间】:2012-04-05 07:51:54 【问题描述】:

我们有一些模型将用户作为外键。但是我们的系统中有大约 25000 名用户,要找到我们需要的用户有点令人生畏。

有没有比选择框更好的解决方案?也许是自动完成,所以我们可以开始输入用户名/地址?还是只是一个搜索框?当为这些对象切换相关用户时,25000 个未排序的用户变得越来越难。

即使只是将其设置为按用户名对用户进行排序也会有所帮助。

【问题讨论】:

这似乎很热:github.com/yourlabs/django-autocomplete-light 【参考方案1】:

我遇到了这个问题,我的结论是改用自动完成字段。在大多数情况下它工作得很好。唯一的问题是当您有很多几乎相同的条目时。例如,在您的情况下,如果您键入 Robert 作为名称,并且列表中有几百个 Robert 条目...

更新

正如 shuckc 的回答中提到的,Django 2.0+ 管理员现在autocomplete built in。

对于较旧的 Django 或在管理员之外使用(旧答案)

有许多应用程序为 Django 管理员添加了自动完成功能:

django-autocomplete-light django-extensions (ForeignKeyAutocompleteAdmin) django-autocomplete(在谷歌代码上) django-ajax-selects django-admin-autocomplete django-autocomplete(提利昂)

我最喜欢的是最后一个。写的很好,可以在admin和admin之外使用,可以和ManyToManyFields、ForeignKeyFields、CharFields等一起使用。

我为我的客户制作了这个项目的fork,添加了一些细节,例如ForeignKeyRawIdWidget 之类的查找(放大镜)按钮。

【讨论】:

可爱.. 谢谢【参考方案2】:

Django 2.0 管理员有autocomplete built in,只需在ModelAdmin 类上设置autocomplete_fields 字段。例如

class QuestionAdmin(admin.ModelAdmin):
    ordering = ['date_created']
    search_fields = ['question_text']

class ChoiceAdmin(admin.ModelAdmin):
    autocomplete_fields = ['question']

【讨论】:

我想知道如果代码已经内置到 Django 2 中,是否有人知道管理员自动完成功能是否可供用户在我们自己的视图中使用。如果没有,人们在使用什么。 如果能找到一种在管理员之外使用管理员自动完成功能的方法,那就太好了。有人可以指出一个可能的用例吗?【参考方案3】:

最简单的开箱即用解决方案是将字段添加到您的ModelAdminraw_id_fields - 然后您将看到一个弹出窗口,您可以在其中使用内置搜索/filtering 和 pagination 控件来查找和选择您所追求的对象。

如果你真的想要自动完成,其他答案会给你一个合理的起点。

【讨论】:

如果你使用的是旧的 Django 版本,它没有很好地支持自动完成包 - 在这种情况下,它应该是你最喜欢的答案【参考方案4】:

There is an app for that(django 自动完成)。

【讨论】:

【参考方案5】:

您可以使用django.contrib.admin.widgets 中的ForeignKeyRawIdWidget。它将 FK 关系呈现为输入,旁边有一个小按钮,显示可搜索的弹出窗口。

【讨论】:

以上是关于Django admin:将选定的相关字段框更改为自动完成的主要内容,如果未能解决你的问题,请参考以下文章

根据值在 Admin 中自定义 Django 表单字段

如何阻止 pyspark 数据框更改为列表?

如何将 Code128 字体文本框更改为可读条形码? [关闭]

在django admin中搜索相关字段

Django admin自定义字段按条件获取最新相关对象的结果

django-19.admin后台自定义显示