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

Возможно ли написать абстрактную функцию фильтрации по HStoreField?

Здравствуйте! Стек, с которым я работаю:
Django 1.9 и Django REST framework для создания API.
django-hstore для работы с HStoreField, в котором я храню атрибуты товаров.
django-filter используется для фильтрации товаров. Из коробки работать с HStoreField не захотел. В документации нашел django_filters.MethodFilter, который позволяет составить кастомный queryset. Однако с этим возникло несколько проблем. Во-первых, атрибуты динамические, так что писать фильтры вида:
class ProductFilter(django_filters.FilterSet):
    scu = django_filters.MethodFilter(action='filter_scu')

    def filter_scu(self, queryset, value):
        queryset = Product.objects.filter(attributes__contains={'scu':value})
        return queryset

    class Meta:
        model = Product
        fields = ['scu', ]

можно бесконечно. Во-вторых, несколько таких функций работаю как OR, а надо как AND. Подскажите, как составить подобную функцию, принимающую словарь вида
attributes={"scu": "214412", "manufacturer": "hp", ...}
и собирающую queryset:
Product.objects.filter(attributes__contains={key:value).filter(...)
  • Вопрос задан
  • 276 просмотров
Подписаться 2 Комментировать
Подписчики вопроса 2 К ответам на вопрос (0)