【问题标题】:django-autocomplete-light simple usagedjango-autocomplete-light 简单用法
【发布时间】: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()

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

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

【问题讨论】:

    标签: python django autocomplete django-autocomplete-light


    【解决方案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_factoryshortcuts like autocomplete_light.modelform_factory or autocomplete_light.get_widgets_dictAPI 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 上!
    猜你喜欢
    • 2016-10-12
    • 2016-03-17
    • 2018-09-20
    • 1970-01-01
    • 2015-10-15
    • 2016-07-05
    • 1970-01-01
    • 2019-08-12
    • 2017-03-26
    相关资源
    最近更新 更多