26 votes

Select2 filtre les valeurs disparaissent lors de la recherche ne retourne aucun résultat

Je suis à l'aide d'un serverside mise en œuvre de tables de données avec yadcf et select2 pour ajouter des fonctionnalités. Les données utilisées pour remplir le tableau est acquis par l'intermédiaire d'une requête Ajax, un Django vu, comme les données de la select2 la fonctionnalité de saisie semi-automatique; mais à partir d'une autre Django vue.

Ma question est comme suit. Si une requête de recherche ne serait pas de retour des résultats, les valeurs de la select2 champs de recherche va disparaître et ne peut pas être réinitialisé dans les tables de données -, vous devez actualiser la page. Les valeurs de non-select2 les champs restent visibles et peuvent être remis à zéro.

Les types de filtre dans les problématiques des colonnes sont multi_select avec un type d' select2. Types de filtre à l'intérieur de la non-problématique des colonnes sont range_date et range_date l'aide bootstrap-datetimepicker comme datepicker type.

Ci-dessous sont mes select2 colonne paramètres.

{
 "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;
    }
  }
}

Ci-dessous mon Django de la vue utilisée pour fournir la fonctionnalité de saisie semi-automatique.

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)

Je vous remercie.

2voto

Aiyoub Amini Points 2106

ajouter le code ci-dessous pour select2:

$('select').select2({
    minimumResultsForSearch: -1
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X