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