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 .filters import AutocompleteListFilter
|
||||
from .filters import BrandAdminFilter, CategoryAdminFilter, TagsAdminFilter, VendorAdminFilter
|
||||
from .forms import OrderForm, OrderProductForm, VendorForm
|
||||
from .models import (
|
||||
Address,
|
||||
|
|
@ -251,10 +251,10 @@ class ProductAdmin(FieldsetsMixin, ActivationActionsMixin, AutocompleteFilterMix
|
|||
list_filter = (
|
||||
"is_active",
|
||||
"is_digital",
|
||||
("brand", AutocompleteListFilter),
|
||||
("category", AutocompleteListFilter),
|
||||
("tags", AutocompleteListFilter),
|
||||
("stocks__vendor", AutocompleteListFilter),
|
||||
BrandAdminFilter,
|
||||
CategoryAdminFilter,
|
||||
TagsAdminFilter,
|
||||
VendorAdminFilter,
|
||||
"created",
|
||||
"modified",
|
||||
)
|
||||
|
|
|
|||
|
|
@ -508,20 +508,39 @@ class AddressFilter(FilterSet):
|
|||
fields = ["uuid", "user_uuid", "user_email", "order_by"]
|
||||
|
||||
|
||||
class AutocompleteListFilter(SimpleListFilter):
|
||||
title = ""
|
||||
parameter_name = ""
|
||||
|
||||
class BaseAutocompleteFilter(SimpleListFilter):
|
||||
def lookups(self, request, model_admin):
|
||||
return ()
|
||||
|
||||
def choices(self, changelist):
|
||||
url = reverse(f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete")
|
||||
val = changelist.get_query_string(remove=[self.parameter_name])
|
||||
current = changelist.params.get(self.parameter_name, "")
|
||||
url = reverse(
|
||||
f"admin:{changelist.opts.app_label}_{self.parameter_name}_autocomplete"
|
||||
)
|
||||
qs = changelist.get_query_string(remove=[self.parameter_name])
|
||||
val = changelist.params.get(self.parameter_name, "")
|
||||
html = (
|
||||
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
|
||||
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