parent
ad4b9dc86b
commit
6ed94177dc
|
|
@ -31,10 +31,22 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
source_field,
|
source_field,
|
||||||
to_field_name
|
to_field_name
|
||||||
) = super().process_request(request)
|
) = super().process_request(request)
|
||||||
linkedfields = request.GET.get("linkedfields")
|
|
||||||
if linkedfields:
|
if 'drilldown' in request.GET:
|
||||||
try:
|
try:
|
||||||
linkedfields = json.loads(linkedfields)
|
drilldown_enabled = int(request.GET.get('drilldown'))
|
||||||
|
except ValueError:
|
||||||
|
raise PermissionDenied from e
|
||||||
|
try:
|
||||||
|
drilldown_enabled = {1:True, 0:False}[drilldown_enabled]
|
||||||
|
except KeyError:
|
||||||
|
raise PermissionDenied from e
|
||||||
|
|
||||||
|
self.drilldown_enabled = drilldown_enabled
|
||||||
|
if drilldown_enabled:
|
||||||
|
if 'linkedfields' in request.GET:
|
||||||
|
try:
|
||||||
|
linkedfields = json.loads(request.GET.get("linkedfields"))
|
||||||
except json.decoder.JSONDecodeError as e:
|
except json.decoder.JSONDecodeError as e:
|
||||||
raise PermissionDenied from e
|
raise PermissionDenied from e
|
||||||
app_label = request.GET["app_label"]
|
app_label = request.GET["app_label"]
|
||||||
|
|
@ -60,16 +72,15 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
"""Return queryset based on ModelAdmin.get_search_results()."""
|
"""Return queryset based on ModelAdmin.get_search_results()."""
|
||||||
qs = super().get_queryset().only()
|
qs = super().get_queryset()
|
||||||
self.autoselect = False
|
if getattr(self, 'drilldown_enabled', False):
|
||||||
# print('Prima:',qs.query,'\n\n')
|
|
||||||
if hasattr(self, 'linkedfields'):
|
if hasattr(self, 'linkedfields'):
|
||||||
|
self.autoselect = False
|
||||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||||
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
||||||
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
||||||
if qs.filter(ddok=1).count() == 1:
|
if qs.filter(ddok=1).count() == 1:
|
||||||
self.autoselect = True
|
self.autoselect = True
|
||||||
# print('Dopo:',qs.query,'\n\n')
|
|
||||||
else:
|
else:
|
||||||
qs = qs.annotate(ddok=Value(1))
|
qs = qs.annotate(ddok=Value(1))
|
||||||
return qs
|
return qs
|
||||||
|
|
@ -79,8 +90,10 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
||||||
Convert the provided model object to a dictionary that is added to the
|
Convert the provided model object to a dictionary that is added to the
|
||||||
results list.
|
results list.
|
||||||
"""
|
"""
|
||||||
out = {"id": str(getattr(obj, to_field_name)), "text": str(obj), "ddok": obj.ddok}
|
out=super().serialize_result(obj, to_field_name)
|
||||||
if self.autoselect and obj.ddok == 1:
|
if hasattr(obj, 'ddok'):
|
||||||
|
out['ddok'] = obj.ddok
|
||||||
|
if getattr(self,'autoselect',False) and obj.ddok == 1:
|
||||||
out['autoselect'] = True
|
out['autoselect'] = True
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
|
|
||||||
$.fn.djangoAdminSelect2 = function() {
|
$.fn.djangoAdminSelect2 = function() {
|
||||||
$.each(this, function(i, element) {
|
$.each(this, function(i, element) {
|
||||||
$(element).select2({
|
var select2_config = {};
|
||||||
ajax: {
|
select2_config.ajax = {
|
||||||
data: (params)=>{
|
data: (params)=>{
|
||||||
var field_name = element.dataset.fieldName
|
var field_name = element.dataset.fieldName
|
||||||
var out = {
|
var out = {
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
field_name: field_name
|
field_name: field_name
|
||||||
};
|
};
|
||||||
if (element.dataset.hasOwnProperty('linkedfields')) {
|
if (element.dataset.hasOwnProperty('linkedfields')) {
|
||||||
|
out.drilldown = 1;
|
||||||
var linkedfields = JSON.parse(element.dataset.linkedfields)
|
var linkedfields = JSON.parse(element.dataset.linkedfields)
|
||||||
var linkedfields_obj = {};
|
var linkedfields_obj = {};
|
||||||
var some_obj = false;
|
var some_obj = false;
|
||||||
|
|
@ -26,7 +27,6 @@
|
||||||
var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field;
|
var remote_id = field_id.slice(0, field_id.length - field_name.length) + remote_field;
|
||||||
var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value;
|
var value = document.querySelectorAll('[data-select2-id=' + remote_id + '].admin-autocomplete')[0].value;
|
||||||
if (value !== '') {
|
if (value !== '') {
|
||||||
//console.log(field + '=' + value);
|
|
||||||
linkedfields_obj[remote_field] = value;
|
linkedfields_obj[remote_field] = value;
|
||||||
some_obj = true;
|
some_obj = true;
|
||||||
}
|
}
|
||||||
|
|
@ -38,10 +38,11 @@
|
||||||
}
|
}
|
||||||
return out
|
return out
|
||||||
}
|
}
|
||||||
},
|
};
|
||||||
templateResult: (item,container)=>{
|
|
||||||
var styleClass = '';
|
|
||||||
if (element.dataset.hasOwnProperty('linkedfields')) {
|
if (element.dataset.hasOwnProperty('linkedfields')) {
|
||||||
|
select2_config.templateResult = (item,container)=>{
|
||||||
|
var styleClass = '';
|
||||||
|
|
||||||
element.classList.add('drilldown');
|
element.classList.add('drilldown');
|
||||||
if (item.ddok === 1) {
|
if (item.ddok === 1) {
|
||||||
styleClass = 'drilldown_ok';
|
styleClass = 'drilldown_ok';
|
||||||
|
|
@ -56,10 +57,11 @@
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return $('<span class="' + styleClass + '"></span>').text(item.text);
|
return $('<span class="' + styleClass + '"></span>').text(item.text);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
$(element).select2(select2_config);
|
||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue