jquery - not - Los valores del filtro Select2 desaparecen cuando la búsqueda no devuelve resultados
select2 selected (1)
Agregue el siguiente código para select2:
$(''select'').select2({
minimumResultsForSearch: -1
});
Estoy usando una implementación de DataTables en el servidor con yadcf y select2 para una funcionalidad adicional. Los datos utilizados para rellenar la tabla se adquieren a través de una solicitud Ajax a una vista Django, al igual que los datos para la funcionalidad autocompletar select2; pero desde una vista separada de Django.
Mi problema es el siguiente. Si una consulta de búsqueda no arrojara resultados, los valores en los campos de búsqueda select2 desaparecerán y no se podrán restablecer en DataTables; en su lugar, debe actualizar la página. Los valores en los campos que no son select2 permanecen visibles y se pueden restablecer.
Los tipos de filtro dentro de las columnas problemáticas son selección multi_select
con un tipo de selección select2
. Los tipos de filtro dentro de las columnas no problemáticas son range_date
y range_date
usando bootstrap-datetimepicker
como tipo datepicker.
A continuación se muestran mis parámetros de columna select2.
{
"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 continuación se muestra mi vista Django utilizada para proporcionar la funcionalidad de autocompletar.
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)
Gracias.