后处理中的Django多场滤波

2024-09-20 22:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个餐厅表,其中包含诸如cuisine\u type和outlet\u type等字段,其中cuisine\u type有一个cuisine表(pk,cuisine\u type),outlet\u type有一个outlet表(pk,outlet\u type)。有更多的领域,如素食主义者友好,可负担性等。用户可以自由选择他们想要强制转换过滤器的任何字段,我不希望创建字段的组合来处理每个请求。那太疯狂了。你知道吗

用户可以对POST请求正文中的任何字段应用筛选器,如下所示:

{
    "outlet_type":  1, 
    "cuisine_type": 2,
    ...
}

视图将在筛选后返回餐厅列表

class RestaurantList(APIView):
    def post(self, request, format=None):
        filter = dict(request.data)
        retaurants = Restaurant.objects.filter(**filter)
        serializer = RestaurantSerializer(retaurants, many=True)
        return Response(serializer.data)

但是,当一个字段下有多个选项时,例如,他们想要过滤多个类型,如1和2,那么请求主体必须添加\u才能使其工作。你知道吗

{
    "outlet_type":  1, 
    "cuisine_type__in": [1, 2],
    ...
}

有更好的方法吗?我希望我们不需要更改键名,只需将值设置为数组,例如:

{
    "outlet_type":  1, 
    "cuisine_type": [1, 2],
    ...
}

Tags: 用户过滤器datarequesttypefilterpost餐厅
1条回答
网友
1楼 · 发布于 2024-09-20 22:23:19

您应该尝试使用django-filter库进行筛选。它的使用非常简单,并提供了一系列过滤选项。你知道吗

对于您的案例,您可以从以下内容开始:

class RestaurantFilter(django_filters.FilterSet):
    #use appropriate field names below.
    outlet_type = django_filters.CharFilter(name="outlet_type", lookup_type="contains")
    cuisine_type = django_filters.CharFilter(name="cuisine_type", lookup_type="contains")

class Meta:
    model = Restaurant

相关问题 更多 >

    热门问题