tolta una informazione pleonastica
parent
9d4b789338
commit
bb6a45e560
|
|
@ -32,69 +32,56 @@ class DrillDownAutocompleteJsonView(AutocompleteJsonView):
|
|||
to_field_name
|
||||
) = super().process_request(request)
|
||||
|
||||
if 'drilldown' in request.GET:
|
||||
if 'filtered_by_dict' in request.GET:
|
||||
try:
|
||||
drilldown_enabled = int(request.GET.get('drilldown'))
|
||||
except ValueError:
|
||||
filtered_by_dict = json.loads(
|
||||
request.GET.get("filtered_by_dict"))
|
||||
except json.decoder.JSONDecodeError as e:
|
||||
raise PermissionDenied from e
|
||||
app_label = request.GET["app_label"]
|
||||
model_name = request.GET["model_name"]
|
||||
source_model = apps.get_model(app_label, model_name)
|
||||
try:
|
||||
drilldown_enabled = {1: True, 0: False}[drilldown_enabled]
|
||||
except KeyError:
|
||||
drilldown_field = self.admin_site._registry[
|
||||
source_model].get_drilldown_autocomplete_fields(request)[source_field.name]
|
||||
filtered_by = set(drilldown_field['filtered_by'])
|
||||
except KeyError as e:
|
||||
raise PermissionDenied from e
|
||||
|
||||
self.drilldown_enabled = drilldown_enabled
|
||||
if drilldown_enabled:
|
||||
if 'filtered_by_dict' in request.GET:
|
||||
try:
|
||||
filtered_by_dict = json.loads(
|
||||
request.GET.get("filtered_by_dict"))
|
||||
except json.decoder.JSONDecodeError as e:
|
||||
raise PermissionDenied from e
|
||||
app_label = request.GET["app_label"]
|
||||
model_name = request.GET["model_name"]
|
||||
source_model = apps.get_model(app_label, model_name)
|
||||
try:
|
||||
drilldown_field = self.admin_site._registry[
|
||||
source_model].get_drilldown_autocomplete_fields(request)[source_field.name]
|
||||
filtered_by = set(drilldown_field['filtered_by'])
|
||||
except KeyError as e:
|
||||
raise PermissionDenied from e
|
||||
if (set(filtered_by_dict.keys()) > filtered_by):
|
||||
raise PermissionDenied
|
||||
rel_paths = drilldown_field['relationship_path']
|
||||
target_model = source_field.remote_field.model
|
||||
try:
|
||||
for v in rel_paths.values():
|
||||
target_model._meta.get_field(v)
|
||||
except FieldDoesNotExist as e:
|
||||
raise PermissionDenied from e
|
||||
self.target_model = target_model
|
||||
self.filtered_by_dict = filtered_by_dict
|
||||
self.drilldown_field = drilldown_field
|
||||
self.drilldown_filter_data = {
|
||||
rel_paths[k]: v for k, v in filtered_by_dict.items()}
|
||||
if (set(filtered_by_dict.keys()) > filtered_by):
|
||||
raise PermissionDenied
|
||||
rel_paths = drilldown_field['relationship_path']
|
||||
target_model = source_field.remote_field.model
|
||||
try:
|
||||
for v in rel_paths.values():
|
||||
target_model._meta.get_field(v)
|
||||
except FieldDoesNotExist as e:
|
||||
raise PermissionDenied from e
|
||||
self.target_model = target_model
|
||||
self.filtered_by_dict = filtered_by_dict
|
||||
self.drilldown_field = drilldown_field
|
||||
self.drilldown_filter_data = {
|
||||
rel_paths[k]: v for k, v in filtered_by_dict.items()}
|
||||
|
||||
return term, model_admin, source_field, to_field_name
|
||||
|
||||
def get_queryset(self):
|
||||
"""Return queryset based on ModelAdmin.get_search_results()."""
|
||||
qs = super().get_queryset()
|
||||
if getattr(self, 'drilldown_enabled', False):
|
||||
if hasattr(self, 'filtered_by_dict'):
|
||||
dd_field = self.drilldown_field
|
||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||
if dd_field.get('autoselect_on_singleton', False):
|
||||
self.autoselect = False
|
||||
if dd_field.get('included_only', False):
|
||||
qs = qs.filter(drilldown_filter_conditions).annotate(
|
||||
ddok=Value(1))
|
||||
else:
|
||||
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
||||
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
||||
if not getattr(self, 'autoselect', True) and qs.filter(ddok=1).count() == 1:
|
||||
self.autoselect = True
|
||||
if hasattr(self, 'filtered_by_dict'):
|
||||
dd_field = self.drilldown_field
|
||||
drilldown_filter_conditions = Q(**self.drilldown_filter_data)
|
||||
if dd_field.get('autoselect_on_singleton', False):
|
||||
self.autoselect = False
|
||||
if dd_field.get('included_only', False):
|
||||
qs = qs.filter(drilldown_filter_conditions).annotate(
|
||||
ddok=Value(1))
|
||||
else:
|
||||
qs = qs.annotate(ddok=Value(1))
|
||||
qs = qs.annotate(ddok=Max(Case(When(drilldown_filter_conditions, then=Value(
|
||||
1)), default=Value(0)))).order_by('-ddok', *qs.query.order_by)
|
||||
if not getattr(self, 'autoselect', True) and qs.filter(ddok=1).count() == 1:
|
||||
self.autoselect = True
|
||||
else:
|
||||
qs = qs.annotate(ddok=Value(1))
|
||||
return qs
|
||||
|
||||
def serialize_result(self, obj, to_field_name):
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
};
|
||||
|
||||
if (element.dataset.hasOwnProperty('drilldown_enabled')) {
|
||||
out.drilldown = 1;
|
||||
|
||||
if (element.dataset.hasOwnProperty('filtered_by')) {
|
||||
const filtered_by_fields = JSON.parse(element.dataset.filtered_by)
|
||||
|
|
|
|||
Loading…
Reference in New Issue