2016-02-11 66 views
1

我有一個模型(我們稱之爲Animal),它有一個ForeignKeyGenus模型。我想有一個Modelform,允許用戶選擇一個動物實例。顯然,單個選擇列表中的動物太多,所以我希望用戶能夠按屬性過濾,然後通過動物進行搜索。Django與Select2遠程數據示例

Select2an example of using Ajax request做點什麼哦,所以,類似我想要的東西。我將搜索屬/動物,而不是搜索usr/repo。用戶可能不知道他們想要的確切的屬或確切的動物,因此這兩個位都需要被搜索。這個UI很適合我的需求。

Django-select2允許我在Django中使用Select2,並且我認爲我應該可以使用widget。請注意,urls.py包含一個url(r'^heavy_data/$', heavy_data, name='heavy_data'),,所以我可以訪問視圖方法罰款。

在我ModelForm__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)) 

我不能確定如何通過整個genus/animal搜索字符串構成的形式向視圖。然而,我甚至可能不會走在正確的軌道上...我是嗎?有沒有更好的方式去做我想要的?

回答

1

這實際上是微不足道的。

首先定義一個新的窗口小部件,像這樣:

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