Django与Select2远程数据示例

时间:2016-02-11 09:49:44

标签: jquery python ajax django jquery-select2

我有一个AnimalForeignKey模型的模型(我们称之为Genus)。我想有一个允许用户选择Animal实例的Modelform。显然,单个选择列表中有太多动物,因此我希望用户能够按属进行过滤,然后按动物搜索。

Select2an example of using Ajax request做一些与我想要的相似的事情。我会搜索 genus / animal ,而不是搜索 usr / repo 。用户可能不知道他们想要的确切属或确切的动物,因此两个位都需要是可搜索的。这个UI可以满足我的需求。

Django-select2允许我将Select2与Django一起使用,并且我认为我应该可以使用widget。请注意,urls.py包含url(r'^heavy_data/$', heavy_data, name='heavy_data'),,因此我可以正常访问视图方法。

在我ModelForm的{​​{1}}中,有:

__init__(...)

self.fields['animal'] = forms.ModelChoiceField( widget=HeavySelect2Widget(data_view='heavy_data'), queryset=Animal.objects.all())

views

我不确定如何将表单中的整个def heavy_data(request): filtered_animals = {} if request.is_ajax(): import ipdb ipdb.set_trace() # What next? return HttpResponse(json.dumps(filtered_animals)) 搜索字符串传递给视图。但是,我可能甚至没有走在正确的轨道上......我呢?有没有更好的方法来做我想要的?

1 个答案:

答案 0 :(得分:2)

这实际上是微不足道的。

首先定义一个新的小部件,如下所示:

class MyWidget(ModelSelect2Widget):
    search_fields = ['name__icontains', 'genus__name__icontains']

然后,在您的表单中,使用该小部件:

class AnimalModelForm(ModelForm):
    class Meta:
        model = Animal
        fields = ['animal', ]
        widgets = {'configurator': MyWidget, }

然后您可以按属,动物或两者进行搜索。没有聪明的格式,您只需输入搜索字词。

非常感谢Johannes Hoppehis help