Features: 1) Replace custom TagNameListFilter with RelatedOnlyFieldListFilter for tags; 2) Replace custom VendorNameListFilter with RelatedOnlyFieldListFilter for vendors;

Fixes: None;

Extra: 1) Remove redundant custom list filter classes for tags and vendors; 2) Streamline ProductAdmin list_filter configuration;
This commit is contained in:
Egor Pavlovich Gorbunov 2025-05-13 07:10:44 +03:00
parent abc91c599e
commit c92cd1d72c

View file

@ -161,53 +161,14 @@ class StockInline(TabularInline):
verbose_name_plural = _("stocks") verbose_name_plural = _("stocks")
class TagNameListFilter(admin.SimpleListFilter):
title = _("tag name")
parameter_name = "tags_tag_name"
def lookups(self, request, model_admin):
qs = model_admin.get_queryset(request)
tags = qs.values_list("tags__tag_name", flat=True).distinct()
return [(tag, tag) for tag in tags if tag]
def queryset(self, request, queryset):
if self.value():
values = [v.strip() for v in self.value().split(",") if v.strip()]
if values:
return queryset.filter(tags__tag_name__in=values)
return queryset
class VendorNameListFilter(admin.SimpleListFilter):
title = _("vendor")
parameter_name = "stocks_vendor_name"
def lookups(self, request, model_admin):
qs = model_admin.get_queryset(request)
vendors = (
qs.values_list("stocks__vendor__name", flat=True)
.distinct()
)
return [(v, v) for v in vendors if v]
def queryset(self, request, queryset):
val = self.value()
if not val:
return queryset
values = [v.strip() for v in val.split(",") if v.strip()] if isinstance(val, str) else [v for v in val if v]
return queryset.filter(stocks__vendor__name__in=values)
@admin.register(Product) @admin.register(Product)
class ProductAdmin(BasicModelAdmin): class ProductAdmin(BasicModelAdmin):
list_display = ("name", "partnumber", "is_active", "category", "brand", "price", "rating", "modified") list_display = ("name", "partnumber", "is_active", "category", "brand", "price", "rating", "modified")
list_filter = ( list_filter = (
"is_active", "is_active",
TagNameListFilter, ("tags__tag_name", admin.RelatedOnlyFieldListFilter),
VendorNameListFilter, ("stocks__vendor__name", admin.RelatedOnlyFieldListFilter),
"created", "created",
"modified", "modified",
) )