2017-01-10 140 views
2

我有一個問題,我typeahead,建議下拉框中出現,同時打字但沒有文字顯示。我所做的,看它是否只是一個隨機的下拉是輸入的話,我知道是我json文件,並且不言語。當我鍵入未在我的數據庫下拉框中被刪除的話,那麼它實際上是沒有工作從json文件的實際文本。同時在搜索框中輸入內容時,我在python控制檯中看到正在進行查詢。Twitter的預輸入沒有顯示文本只是一個空白下拉

在這裏你可以看到我輸入「數論」就是在我json,你可以看到下拉菜單中沒有出現任何文本。

Here you can see me typing 'Number theory' that is in my <code>json</code>

我確信,我的json格式是使用http://jsonlint.com/正確的。爲什麼不在下拉框中顯示文字?

這是我的看法:

def search_subclasss(request): 

    q = request.GET.get('subclass', '') 
    sub_classs = SubClasss.objects.filter(subclasss__icontains=q) 
    results = [] 

    for subclasss in sub_classs: 

     results.append([subclasss.subclasss, subclasss.subject_id]) 

    data = json.dumps(results) 

    return HttpResponse(data, content_type='application/json') 

這是我的html:

<script type="text/javascript"> 
     var bestPictures = new Bloodhound({ 
      datumTokenizer: Bloodhound.tokenizers.obj.whitespace('subclasss'), 
      queryTokenizer: Bloodhound.tokenizers.whitespace, 

      remote: { 
       url: "{% url 'search_subclasss' %}?subclass=%QUERY", 
       //url: '/search_subclasss/?subclass=%QUERY', 
       wildcard: '%QUERY' 
      } 
     }); 

     $('#remote .typeahead').typeahead(null, { 
      name: 'subclasss', 
      display: 'subclasss', 
      limit: 10, 
      source: bestPictures 
     }); 
    </script> 

我的形式呈現:

<div class="form-group"> 
    <div id="remote"> 
     {% render_field form_post.subclass %} 
    </div> 
</div> 

隨着表單控件:

widget = {'subclass': forms.TextInput(attrs={'class': 'form-control typeahead', 'placeholder': 'class/subclass'}), 

回答

1

我通過創建一個Python字典dict_subclasss我執行我的過濾器後,解決我自己的問題。從那以後,我只是追加每dict_subclassresults陣列。現在我可以將json從視圖發送到模板。

def search_subclasss(request): 
    q = request.GET.get('subclass', '') 
    sub_classs = SubClasss.objects.filter(subclasss__icontains=q) 
    results = [] 

    for subclasss in sub_classs: 
     dict_subclass = { 
      'subject': subclasss.subject_id, 
      'subclasss': subclasss.subclasss, 
     } 
     results.append(dict_subclass) 

    data = json.dumps(results) 

    return HttpResponse(data, content_type='application/json') 

我能從中得到什麼?那麼twitter-typeahead是如何接收其json格式非常有選擇性。

上面的代碼將會給你一個json這樣,該JavaScripttypeahead可以正確地解釋:

[{"subject": "AGR", "subclasss": "Agroecology"}, {"subject": "AGR", "subclasss": "Agronomy"},...,{"subject": "TR", "subclasss": "Operations research"}, {"subject": "TR", "subclasss": "Mass transit"}] 

而且我做了什麼之前是這樣results.append([subclasss.subclasss, subclasss.subject_id])這給了json結果:

[["Agroecology", "AGR"], ["Agronomy", "AGR"],...,["Operations research", "TR"], ["Mass transit", "TR"]] 

雖然兩者都是正確json格式key是一樣的value一樣重要,需要指定將顯示哪個搜索字段並用於執行查詢匹配。

相關問題