Задать вопрос
@s7fkcu

Django-filters, почему не работает __init__ в FilterSet?

Добрый день. Использую django-filters, хочу переопределить __init__ в FilterSet
# оба варианта не работают
class ProductFilter(django_filters.FilterSet):

    def __init__(self, *args, **kwargs):
        slug = kwargs.pop('slug', None)
        super(ProductFilter, self).__init__(*args, **kwargs)
        self.filters['brand'].extra.update({
           'queryset': Brand.objects.filter(is_active=True,
                                            product_brand__isnull=False,
                                            product_brand__category__slug=slug),
           'empty_label': '',
           'help_text': False
        })
        # self.brand = django_filters.ModelMultipleChoiceFilter(field_name='brand__name', to_field_name='name',
        #                                                       label='Бренды')
        # self.brand.queryset = Brand.objects.filter(is_active=True, product_brand__isnull=False,
        #                                            product_brand__category__slug=slug)   
    class Meta:
        model = Product
        fields = ['brand']

выводит все бренды, т.е. queryset не срабатывает.
Конечно можно объявить так
class ProductFilter(django_filters.FilterSet):
    brand = django_filters.ModelMultipleChoiceFilter(field_name='brand__name',
                                                      to_field_name='name',
                                                      label='Бренды',
                                                      queryset=Brand.objects.filter(is_active=True,
                                                                                    product_brand__isnull=False,
                                                                                    product_brand__category__slug='slug_category'),
                                                       widget=forms.CheckboxSelectMultiple)
    class Meta:
        model = Product
        fields = ['brand']

и все работает как надо, но мне нужно передать slug_category.
Как можно решить проблему? В чем проблема у меня? Спасибо.
  • Вопрос задан
  • 488 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
alternativshik
@alternativshik
Так должно работать
class ProductFilter(django_filters.FilterSet):
    brand = django_filters.ModelMultipleChoiceFilter(field_name='brand__name',
                                                      to_field_name='name',
                                                      label='Бренды',
                                                      queryset=Brand.objects.all()
           )

    def __init__(self, *args, **kwargs):
        slug = kwargs.pop('slug', None)
        super(ProductFilter, self).__init__(*args, **kwargs)
        self.filters['brand'].queryset = Brand.objects.filter(is_active=True,
                                                                                    product_brand__isnull=False,
                                                                                    product_brand__category__slug=slug),
                                                       widget=forms.CheckboxSelectMultiple)

    class Meta:
        model = Product
        fields = ['brand']
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы