18

我正在尝试了解如何将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()

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

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

4

1 回答 1

20

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

此表单字段未指定小部件,因此默认情况下应使用选择小部件

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

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

您是否阅读过有关使用小部件的 django 文档

改用 autocomplete_light.ChoiceWidget

您所要做的就是指定小部件

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诸如或之类的快捷方式autocomplete_light.modelform_factoryautocomplete_light.get_widgets_dictAPI 文档是可以通过的,但它并不优于阅读源代码

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

隐藏的文档

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

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

于 2013-01-23T12:16:17.557 回答