自定义过滤分类,增加过滤条件top_category_filter.用于过滤某个分类下的所有商品.
class GoodsFilter(django_filters.rest_framework.FilterSet):
"""
商品的过滤类
"""
pricemin = django_filters.NumberFilter(field_name='shop_price', help_text="最低价格",lookup_expr='gte')
pricemax = django_filters.NumberFilter(field_name='shop_price', lookup_expr='lte')
top_category = django_filters.NumberFilter(method='top_category_filter')
#过滤逻辑
#类别为1OR2OR3,Q查询之间是或的关系
def top_category_filter(self, queryset, name, value):
queryset = queryset.filter(Q(category_id=value) | Q(category__parent_category_id=value) | Q(category__parent_category__parent_category_id=value))
return queryset
class Meta:
model = Goods
fields = ['pricemin', 'pricemax', 'is_hot', 'is_new']
如果在settings中的REST_FRAMEWORK中配置了token认证,那么会默认进行了全局认证,会将一些不需要认证的公共页面也进行拦截,所以我们只需要配置在接口里面就能进行单独页面的token认证。
所以可以在需要配置的页面的接口里配置:
authentication_classes = (TokenAuthentication, )