tolta una informazione pleonastica

my-submodulepoetico
Guido Longoni 2023-07-06 02:20:43 +02:00
parent 9d4b789338
commit bb6a45e560
2 changed files with 39 additions and 53 deletions

View File

@ -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):

View File

@ -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)