MA COME FACEVA A FUNZIONARE PRIMAAA!?!?!?!?
parent
891ca6a71d
commit
ce6742c047
|
|
@ -28,7 +28,6 @@ class AjaxAutocompleteSelectWidget(AutocompleteSelect):
|
|||
self.model = kwargs.pop('model')
|
||||
self.field_name = kwargs.pop('field_name')
|
||||
kwargs.update(admin_site=self.model_admin.admin_site)
|
||||
kwargs.update(field=getattr(self.model, self.field_name).field)
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def render(self, name, value, attrs=None, renderer=None):
|
||||
|
|
@ -46,16 +45,16 @@ class AjaxAutocompleteSelectWidget(AutocompleteSelect):
|
|||
|
||||
class AjaxAutocompleteListFilter(admin.RelatedFieldListFilter):
|
||||
title = _('list filter')
|
||||
parameter_name = '%s_%s__exact'
|
||||
parameter_name = None
|
||||
template = 'djaa_list_filter/admin/filter/autocomplete_list_filter.html'
|
||||
|
||||
def __init__(self, field, request, params, model, model_admin, field_path):
|
||||
model = field.remote_field.model
|
||||
super().__init__(field, request, params, model, model_admin, field_path)
|
||||
|
||||
qs_target_value = self.parameter_name % (field.name, model._meta.pk.name)
|
||||
queryset = self.get_queryset_for_field(model, field.name)
|
||||
qs_target_value = f'{field_path}__{model._meta.pk.name}__exact'
|
||||
queryset = model.objects.get_queryset()
|
||||
widget = AjaxAutocompleteSelectWidget(
|
||||
model_admin=model_admin, model=model, field_name=field.name, qs_target_value=qs_target_value
|
||||
model_admin=model_admin, model=model, field=field, field_name=field.name, qs_target_value=qs_target_value
|
||||
)
|
||||
|
||||
class AutocompleteForm(forms.Form):
|
||||
|
|
@ -68,33 +67,16 @@ class AjaxAutocompleteListFilter(admin.RelatedFieldListFilter):
|
|||
initial_values.update(autocomplete_field=autocomplete_field_initial_value)
|
||||
self.autocomplete_form = AutocompleteForm(initial=initial_values, prefix=field.name)
|
||||
|
||||
def get_queryset_for_field(self, model, name):
|
||||
"""
|
||||
Thanks to farhan0581
|
||||
https://github.com/farhan0581/django-admin-autocomplete-filter/blob/master/admin_auto_filters/filters.py
|
||||
"""
|
||||
|
||||
field_desc = getattr(model, name)
|
||||
if isinstance(field_desc, ManyToManyDescriptor):
|
||||
related_model = field_desc.rel.related_model if field_desc.reverse else field_desc.rel.model
|
||||
elif isinstance(field_desc, ReverseManyToOneDescriptor):
|
||||
related_model = field_desc.rel.related_model
|
||||
else:
|
||||
return field_desc.get_queryset()
|
||||
return related_model.objects.get_queryset()
|
||||
|
||||
|
||||
class AjaxAutocompleteListFilterModelAdmin(admin.ModelAdmin):
|
||||
def get_list_filter(self, request):
|
||||
list_filter = list(super().get_list_filter(request))
|
||||
autocomplete_list_filter = self.get_autocomplete_list_filter()
|
||||
def __init__(self, *args, **kwargs):
|
||||
autocomplete_list_filter = list(getattr(self,'autocomplete_list_filter',[]))
|
||||
list_filter = list(getattr(self,'list_filter',[]))
|
||||
if autocomplete_list_filter:
|
||||
for field in autocomplete_list_filter:
|
||||
list_filter.append((field, AjaxAutocompleteListFilter))
|
||||
return list_filter
|
||||
|
||||
def get_autocomplete_list_filter(self):
|
||||
return list(getattr(self, 'autocomplete_list_filter', []))
|
||||
self.list_filter = list_filter
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
class Media:
|
||||
js = [
|
||||
|
|
|
|||
Loading…
Reference in New Issue