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