40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
from django.forms.widgets import Select
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django_filters import FilterSet
|
|
|
|
from djng.forms import NgModelFormMixin
|
|
from djng.styling.bootstrap3.forms import Bootstrap3Form
|
|
|
|
from shop.filters import ModelChoiceFilter
|
|
|
|
from weirdlittleempire.models import Manufacturer, Product
|
|
|
|
|
|
class FilterForm(NgModelFormMixin, Bootstrap3Form):
|
|
scope_prefix = 'filters'
|
|
|
|
|
|
class ManufacturerFilterSet(FilterSet):
|
|
manufacturer = ModelChoiceFilter(
|
|
queryset=Manufacturer.objects.all(),
|
|
widget=Select(attrs={'ng-change': 'filterChanged()'}),
|
|
empty_label=_("Any Manufacturer"),
|
|
help_text=_("Restrict product on this manufacturer only"),
|
|
)
|
|
|
|
class Meta:
|
|
model = Product
|
|
form = FilterForm
|
|
fields = ['manufacturer']
|
|
|
|
@classmethod
|
|
def get_render_context(cls, request, queryset):
|
|
# create filter set with bound form, to enable the selected option
|
|
filter_set = cls(data=request.GET)
|
|
|
|
# we only want to show manufacturers for products available in the current list view
|
|
filter_field = filter_set.filters['manufacturer'].field
|
|
filter_field.queryset = filter_field.queryset.filter(
|
|
id__in=queryset.values_list('manufacturer_id'))
|
|
return dict(filter_set=filter_set)
|