Features: 1) Add BaseAutocompleteFilter and specialized filters (BrandAdminFilter, CategoryAdminFilter, TagsAdminFilter, VendorAdminFilter) for admin filtering;
Fixes: 1) Replace hardcoded `AutocompleteListFilter` with newly created filters for better modularity; Extra: 1) Refactor queryset string handling and enhance readability in filter choices; 2) Update admin `list_filter` with new filter classes.
This commit is contained in:
parent
76c700c3a0
commit
c3d5160e61
2 changed files with 33 additions and 14 deletions
|
|
@ -13,7 +13,7 @@ from mptt.admin import DraggableMPTTAdmin
|
||||||
|
|
||||||
from evibes.settings import CONSTANCE_CONFIG
|
from evibes.settings import CONSTANCE_CONFIG
|
||||||
|
|
||||||
from .filters import AutocompleteListFilter
|
from .filters import BrandAdminFilter, CategoryAdminFilter, TagsAdminFilter, VendorAdminFilter
|
||||||
from .forms import OrderForm, OrderProductForm, VendorForm
|
from .forms import OrderForm, OrderProductForm, VendorForm
|
||||||
from .models import (
|
from .models import (
|
||||||
Address,
|
Address,
|
||||||
|
|
@ -251,10 +251,10 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, AutocompleteFilterMix
|
||||||
list_filter = (
|
list_filter = (
|
||||||
"is_active",
|
"is_active",
|
||||||
"is_digital",
|
"is_digital",
|
||||||
("brand", AutocompleteListFilter),
|
BrandAdminFilter,
|
||||||
("category", AutocompleteListFilter),
|
CategoryAdminFilter,
|
||||||
("tags", AutocompleteListFilter),
|
TagsAdminFilter,
|
||||||
("stocks__vendor", AutocompleteListFilter),
|
VendorAdminFilter,
|
||||||
"created",
|
"created",
|
||||||
"modified",
|
"modified",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -508,20 +508,39 @@ class AddressFilter(FilterSet):
|
||||||
fields = ["uuid", "user_uuid", "user_email", "order_by"]
|
fields = ["uuid", "user_uuid", "user_email", "order_by"]
|
||||||
|
|
||||||
|
|
||||||
class AutocompleteListFilter(SimpleListFilter):
|
class BaseAutocompleteFilter(SimpleListFilter):
|
||||||
title = ""
|
|
||||||
parameter_name = ""
|
|
||||||
|
|
||||||
def lookups(self, request, model_admin):
|
def lookups(self, request, model_admin):
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
def choices(self, changelist):
|
def choices(self, changelist):
|
||||||
url = reverse(f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete")
|
url = reverse(
|
||||||
val = changelist.get_query_string(remove=[self.parameter_name])
|
f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete"
|
||||||
current = changelist.params.get(self.parameter_name, "")
|
)
|
||||||
|
qs = changelist.get_query_string(remove=[self.parameter_name])
|
||||||
|
val = changelist.params.get(self.parameter_name, "")
|
||||||
html = (
|
html = (
|
||||||
f'<input type="hidden" class="django-autocomplete admin-autocomplete-filter" '
|
f'<input type="hidden" class="django-autocomplete admin-autocomplete-filter" '
|
||||||
f'data-autocomplete-url="{url}" name="{self.parameter_name}" value="{current}"/>'
|
f'data-autocomplete-url="{url}" name="{self.parameter_name}" value="{val}"/>'
|
||||||
)
|
)
|
||||||
# noinspection DjangoSafeString
|
# noinspection DjangoSafeString
|
||||||
yield {"query_string": val, "display": mark_safe(html)}
|
yield {"query_string": qs, "display": mark_safe(html)}
|
||||||
|
|
||||||
|
|
||||||
|
class BrandAdminFilter(BaseAutocompleteFilter):
|
||||||
|
title = _("By Brand")
|
||||||
|
parameter_name = _("brand")
|
||||||
|
|
||||||
|
|
||||||
|
class CategoryAdminFilter(BaseAutocompleteFilter):
|
||||||
|
title = _("By Category")
|
||||||
|
parameter_name = _("category")
|
||||||
|
|
||||||
|
|
||||||
|
class TagsAdminFilter(BaseAutocompleteFilter):
|
||||||
|
title = _("By Product tags")
|
||||||
|
parameter_name = _("tags")
|
||||||
|
|
||||||
|
|
||||||
|
class VendorAdminFilter(BaseAutocompleteFilter):
|
||||||
|
title = _("By Associated vendor")
|
||||||
|
parameter_name = _("stocks__vendor")
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue