2017-12-04 18 views
2

私が代わりに単一のリストの複数のクエリセットを表示していましたジャンゴのためのオートコンプリートをコード化しようとしています、この実装を持っている別のサイトの例としては、ここで見つけることができます:今https://www.uala.it/ジャンゴ:複数のクエリセットでjQueryのオートコンプリート

あなたは、私が表示するようにUIを変更することができますどのように、私は2つのモデルからのデータでjson.dumpsを返すよ見ることができるように

def multi_autocomplete(request): 
    if request.is_ajax(): 
     # In base a cosa sta scrivendo l'utente mostro un set di aziende. 
     query = request.GET.get("term", "") 
     companies = Company.objects.filter(name__icontains=query) 
     treatments = Treatment.objects.filter(name__icontains=query) 
     results = [] 
     for company in companies: 
      place_json = company.name 
      results.append(place_json) 
     for treatment in treatments: 
      place_json = treatment.name 
      results.append(place_json) 
     data = json.dumps(results) 
    return HttpResponse(data, "application/json") 

:私は、クエリセットに2つのモデルのオブジェクトを送信することができましたリンクのような異なる列の値は私が提供した?

答えて

1

あなたは、両方のリストをマージし、それに応じて次のようになります

from django.db.models import F 

def multi_autocomplete(request): 
    if request.is_ajax(): 
     query = request.GET.get("term", "") 
     companies = Company.objects.filter(name__icontains=query).annotate(value=F('name'), label=F('name')).values('id', 'value', 'label') 
     treatments = Treatment.objects.filter(name__icontains=query).annotate(value=F('name'), label=F('name')).values('id', 'value', 'label') 
     results = list(companies) + list(treatments) 
     data = json.dumps(results) 
    else: 
     data = 'fail' 
    return HttpResponse(data, 'application/json') 

あなたのオートコンプリートハンドラを、それを送信する必要があります。

$("#input_element_id").autocomplete({ 
    source: "{% url 'url name' %}", 
    response: function(event, ui) { 
     if (!ui.content.length) { 
      var noResult = { value: "", label: "No data found" }; 
      ui.content.push(noResult); 
     } 
    }, 
    select: function (e, ui) { 
     if (ui.item.value) { 
      //do stuff after user selected option from autocomplete 
     } 
    } 
}); 

更新

私はこれが役立つと思います。この​​をチェックしてください。

+0

あなたが提供したコードは動作しています。これはすでに達成した結果と同じですが、これは両方のモデルの要素を持つ単一のリストです...しかし、この結果を2つの異なるリストに出力する方法はわかりません。 – alessioferri20

+0

あなたは2つの別々のリストにしたいですか? – Satendra

+0

正確には、私が提供したリンクのように:www.ala.it、そのサイトでは、2つのリストに結果を表示しようとすると:TrattamentiとSaloni。私はそのようなことをする方法を知らない! – alessioferri20

0

$("#input_autocomplete").autocomplete({ 
     source: function(request, response) { 

      $.ajax({ 
       type:"GET", 
       cache:false, 
       data:{ 
        'term': request.term, 
       }, 
       url: "{% url 'treatment-autocomplete' %}", 
       success:function(data) { 
        $("#input_autocomplete").removeClass('ui-autocomplete-loading'); 
        $('#companyList').empty(); 
        $('#treatmentList').empty(); 
        $.each(data['companies'], function(i, item) { 
         $('#companyList').append(item); 
        }); 
        $.each(data['treatments'], function(i, item) { 
         $('#treatmentList').append(item); 
        }); 
       } 
      }); 

     }, 
     error: function(data) { 
      $('#input_autocomplete').removeClass('ui-autocomplete-loading'); 
     } 
     minLength: 1, 
     open: function() {}, 
     close: function() {}, 
     focus: function(event,ui) {}, 
     select: function(event, ui) {} 

を取り扱うオートコンプリートAJAX}

clist = [] 
tlist = [] 

for company in companies: 
    clist.append(company.name) 
for treatment in treatments: 
    tlist.append(treatment) 
data = json.dumps({"companies":clist, "treatments":tlist}) 
return HttpResponse(data, "application/json") 

、辞書形式で結果を送信し、オートコンプリートAJAX応答ハンドラでそれを処理するようにしてみてください)。

+0

「オートコンプリートajaxレスポンスハンドラで同じものを処理する」とはどういう意味ですか?私は明確化のためにいくつかのコードを表示できますか?私はjqueryでうまくいきません、私は実際に私のHTMLファイルにこれを持っています:$(function(){ $( "#input_autocomplete")。オートコンプリート({ ソース: "{%url '治療 - オートコンプリート'%}" 、 最小長:1、 }); }); – alessioferri20

+0

https://www.uala.it/のように表示しますか? 1つのオートコンプリートボックスで検索し、他の2つのリストに出力を表示します。 –

+0

yes exacltyしかし、出力を2つの区切りリスト(jQuery内)で表示するために出力を変更する方法はありません。 – alessioferri20

関連する問題