Здравствуйте! Стек, с которым я работаю:
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(...)