Skip to main content
 首页 » 编程设计

jquery之Django 与 Select2 远程数据示例

2024年10月24日31qq78292959

我有一个模型(我们称它为 Animal),它有一个 ForeignKey 到 Genus 模型。我想要一个允许用户选择 Animal 实例的 Modelform。显然,对于一个选择列表来说,动物太多了,所以我希望用户能够按属筛选,然后按动物搜索。

Select2有an example of using Ajax request做一些与我想要的非常相似的事情。我不会搜索usr/repo,而是搜索属/动物。用户可能不知道他们想要的确切属或确切动物,因此这两个位都需要可搜索。这个 UI 很适合我的需要。

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

在我的 ModelForm 的 __init__(...) 中,有:

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

在 View 中:

def heavy_data(request): 
    filtered_animals = {} 
    if request.is_ajax(): 
        import ipdb 
        ipdb.set_trace() 
        # What next? 
    return HttpResponse(json.dumps(filtered_animals)) 

我不确定如何将整个 genus/animal 搜索字符串从表单传递到 View 。但是,我什至可能没有走上正确的轨道……是吗?有没有更好的方法来做我想做的事?

请您参考如下方法:

这实际上是微不足道的。

首先像这样定义一个新的小部件:

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

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

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

然后您可以按属、动物或两者进行搜索。没有巧妙的格式设置,您只需键入搜索词即可。

非常感谢Johannes Hoppe对于his help .