2016-09-07 19 views
27

Ekstra işlevsellik için yadcf ve select2 içeren bir DataTable uygulamasının bir sunucu uygulamasını kullanıyorum. Veriler, bir Ajax isteği aracılığıyla edinilen tabloyu, bir 2 Django görünümüne aktarırken, select2 otomatik tamamlama işlevselliği için veriler olduğu gibi ayrı bir Django görünümünden de kullanılır.Search2 hiçbir sonuç döndürmediğinde Select2 filtre değerleri kayboluyor

Sorunum şu şekildedir. Bir arama sorgusu, sonuç döndürmezse, select2 arama alanlarındaki değerler kaybolacak ve DataTable'larda sıfırlanamaz - bunun yerine sayfayı yenilemeniz gerekir. Seçilmemiş2 alanlarındaki değerler görünür kalır ve sıfırlanabilir.

sorunlu sütunlar içinde filtre türleri select2 seçilmiş bir tip multi_select bulunmaktadır. Sorunlu olmayan sütunlardaki filtre türleri, bootstrap-datetimepicker tarih aralığı türü olarak range_date ve range_date'dur.

Seçtiğim2 sütun parametreleri.

{ 
"column_number": 3, 
"filter_type": "multi_select", 
"select_type": "select2", 
"select_type_options": { 
    dropdownCssClass : 'bigdrop', 
    multiple: true, 
    minimumInputLength: 1, 
    ajax: { 
     url: '{% url 'ffTestApp:searchData' 'product' %}', 
     delay: 250, 
     dataType: 'json', 
     data: function (params) { 
     return { 
      q: params.term, 
      v: yadcf.exGetColumnFilterVal(table,4), 
      s: yadcf.exGetColumnFilterVal(table,5) 
     }; 
     }, 
     processResults: function (data, params) { 
     params.page = params.page || 1; 
     return { 
      results: data.items 
     }; 
     }, 
    }, 
    escapeMarkup: function (markup) { return markup; }, 
    templateResult: function(data) { 
     return data.id; 
    }, 
    templateSelection: function(data) { 
     return data.id; 
    } 
    } 
} 

Aşağıda otomatik tamamlama işlevsellik sağlamak için kullanılan benim Django görünümüdür.

def searchData(request, column): 
    try: 
     q = request.GET.getlist('q')[0] 
    except: 
     pass 
    else: 
     if q != "": 
      try: 
       products = request.GET.getlist('p[]') 
      except: 
       pass 
      else: 
       product_q = list() 
       for p in products: 
        product_q.append("p.name='{}'".format(p)) 
       if len(product_q)>0: 
        product_q = "({}) AND ".format(" OR ".join(product_q)) 
       else: 
        product_q = "" 

      try: 
       versions = request.GET.getlist('v[]') 
      except: 
       pass 
      else: 
       version_q = list() 
       for v in versions: 
        version_q.append("tp.version='{}'".format(v)) 
       if len(version_q)>0: 
        version_q = "({}) AND ".format(" OR ".join(version_q)) 
       else: 
        version_q = "" 

      try: 
       serials = request.GET.getlist('s[]') 
      except: 
       pass 
      else: 
       serial_q = list() 
       for v in serials: 
        serial_q.append("s.serial='{}'".format(v)) 
       if len(serial_q)>0: 
        serial_q = "({}) AND ".format(" OR ".join(serial_q)) 
       else: 
        serial_q = "" 

      autoComplete = connection.cursor() 
      if column == "product": 
       query = "SELECT DISTINCT p.name FROM ffTestApp.ffTestApp_product AS p INNER JOIN ffTestApp.ffTestApp_testprogram AS tp " \ 
        "ON tp.product_id=p.id INNER JOIN ffTestApp.ffTestApp_session AS s ON s.test_program_id = tp.id " \ 
        "WHERE {1}{2}p.name REGEXP '{0}' ORDER BY p.name ASC;".format(q, version_q, serial_q) 
      elif column == "version": 
       query = "SELECT DISTINCT tp.version FROM ffTestApp.ffTestApp_testprogram AS tp INNER JOIN ffTestApp.ffTestApp_session AS s " \ 
        "ON s.test_program_id=tp.id INNER JOIN ffTestApp_product AS p ON tp.product_id=p.id WHERE {1}{2}tp.version REGEXP '{0}'" \ 
        " ORDER by tp.version;".format(q, product_q, serial_q) 
      elif column == "serial": 
       query = "SELECT DISTINCT s.serial FROM ffTestApp.ffTestApp_session AS s INNER JOIN ffTestApp_testprogram AS tp ON s.test_program_id=tp.id" \ 
        " INNER JOIN ffTestApp_product AS p ON tp.product_id=p.id WHERE {1}{2}" \ 
        "s.serial REGEXP '{0}' ORDER BY s.serial;".format(q, product_q, version_q) 
      elif column == "status": 
       query = "SELECT DISTINCT final FROM ffTestApp.ffTestApp_session WHERE final REGEXP '{0}' ORDER BY final;".format(q) 

      autoComplete.execute(query) 
      m = [] 
      for i in autoComplete.fetchall(): 
       value = dict() 
       value["id"] = i 
       m.append(value) 
      results = {"items": m} 
    return JsonResponse(results, safe=False) 

Teşekkür ederiz.

+0

bir test sayfasına link vermeden yardımcı olamaz

$('select').select2({ minimumResultsForSearch: -1 }); 
, sen Hey (dosyadan) ajax kaynağı kullanılarak çoğaltmak ve herhangi js oyun alanı web – Daniel

+0

üzerinde host deneyebilirsiniz Daniel, öyle görünüyor ki, bu hata, örneklerinden birinde bağlı. Aşağıdakileri deneyin: Bazı Veriler sütununda 'Bazı Veriler 11'i arayın. Değerler sütununda 'b_value' ifadesini arayın. Bazı Veriler sütunundaki arama parametresinin kaybolduğunu göreceksiniz. http://yadcf-showcase.appspot.com/cumulative_filtering.html –

+0

"b_value" (ve "a_value, e_value" dışındakiler), bir "kümülatif_filtering" modu ... olamayacağı için mevcut olmamalıdır. neden bu olduğunu görüyoruz ... – Daniel

cevap

1

2'yi Seç için kod aşağıda ekleyin: