django-autocomplete-light 简单用法

Posted

技术标签:

【中文标题】django-autocomplete-light 简单用法【英文标题】:django-autocomplete-light simple usage 【发布时间】:2013-01-06 14:54:17 【问题描述】:

我正在尝试了解如何将django-autocomplete-light 用于现有项目。这似乎是 django 的一个很好的自动完成解决方案,我已经在使用普通的 ModelChoiceFields。

所以,假设我有一个名为 MyModel 的模型,它有一个 id 和一个名称。我想知道的是创建表单小部件的最简单方法,它可以为我提供与

相同的功能 mymodel = forms.ModelChoiceField(必需=True,queryset=ships.models.Authority.objects.all(),)

所以我可以将该小部件添加到我想要的任何表单中,以便在不使用 select.t 的情况下选择 MyModel 的实例

需要哪些步骤?我已经将 'autocomplete_light' 添加到 INSTALLED_APPS 和

url(r'autocomplete/', include('autocomplete_light.urls')),

到 urls.py 和

import autocomplete_light
autocomplete_light.autodiscover()

之前

admin.autodiscover()

但是我对下一步该怎么做感到困惑:(

请不要在我已经彻底阅读过的文档中指出我。

【问题讨论】:

【参考方案1】:

选择小部件是 ModelChoiceField 的默认小部件

这个表单域没有指定小部件,所以the select widget should be used by default带有:

mymodel = forms.ModelChoiceField(
                required=True,
                queryset=ships.models.Authority.objects.all(),
          ) 

这就是您看到选择字段而不是自动完成的原因。

你读过django docs about using widgets吗?

改用 autocomplete_light.ChoiceWidget

您只需specify the widget:

mymodel = forms.ModelChoiceField(
            required=True,
            queryset=ships.models.Authority.objects.all(),
            widget=autocomplete_light.ChoiceWidget('AutocompleteName')
          ) 

如果您不知道自动完成的名称是什么,请以员工身份登录并打开http://yoursite/autocomplete/

确保您已正确加载 jquery,并且 autocomplete-light 的静态文件也已加载!

替代方案

FTR:另一种方法是可能的,使用 autocomplete_light.modelform_factory 和 shortcuts like autocomplete_light.modelform_factory or autocomplete_light.get_widgets_dict。 API docs 还过得去,但比不上reading the source code。

总而言之,我认为对您来说最简单的方法是使用 get_widgets_dict 快捷方式如果您使用的是 ModelForm

隐藏文档

您可能没有找到 the cookbook,因为它是 docs_rewrite 分支中正在进行的工作,但“高级基础知识”的第二部分提供了几个使用小部件的示例。

我知道文档有问题,因此 docs_rewrite 分支。现在我专注于改进移动支持。

【讨论】:

非常感谢这与添加 autocomplete_light.register(MyModel) 一起工作! 好吧,我现在有另一个问题:如何根据请求更改查询集?我有不同类型的用户需要查看 MyModel 的不同子集。有可能吗? 只需覆盖choices_for_request。 @Serafeim 你在哪里添加autocomplete_light.register(MyModel) 我一直在用它来填充我的代码,但我找不到它应该去哪里! 请查看教程。你需要把它放在 autocomplete_light_registry.py 上!

以上是关于django-autocomplete-light 简单用法的主要内容,如果未能解决你的问题,请参考以下文章

django-autocomplete-light 简单用法

使用 django-autocomplete-light 自动完成

Django:django-autocomplete-light 无法正常工作

如何使用 django-autocomplete-light

Django - django-autocomplete-light 设置如何

django-autocomplete-light 默认加载以前保存的值?