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.