gpt4 book ai didi

python - 如何通过多个关键字从数据库中过滤DRF中的数据?

转载 作者:太空宇宙 更新时间:2023-11-03 20:54:41 25 4
gpt4 key购买 nike

我是一名初学者,正在使用 Django Rest 框架开发一个小型 REST API 项目。 PostgreSQL 数据库中有一堆带有文本字段的记录,我有一些关键字列表。我正在尝试过滤包含此文本字段中的一个或一些关键字列表中的单词的数据。

您能否建议我另一种在 DRF 中组织过滤的方法,即一次使用整个关键字列表,而无需在表单中输入它们?

我正在尝试使用 django_filters 来做到这一点

这里如果过滤器类:

# filter

class DataFilter(django_filters.rest_framework.FilterSet):
keyword = CharFilter(field_name='description', lookup_expr='icontains')

class Meta:
model = Data
fields = ('keyword', )

这里如果查看类:

# view

class DataList(generics.ListAPIView):

def get_queryset(self):
return Data.objects.filter(deadline__gte=date.today())

serializer_class = DataSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = DataFilter

但在这种情况下,它仅根据我在表单中输入的一个单词进行过滤。

最佳答案

我认为你可以这样做:

首先,从 BaseInFilter 创建一个新的过滤器集子类和CharFilter:

class CharInFilter(django_filters.BaseInFilter, django_filters.CharFilter):
pass

然后,像这样更新您的 FilterSet 类:

class DataFilter(django_filters.FilterSet):
keyword__in = CharInFilter(field_name='keyword', lookup_expr='in')

class Meta:
model = Data
fields = []

然后你可以像这样使用这个FilterSet(与你当前的实现相同):

class DataList(generics.ListAPIView): 

def get_queryset(self):
return Data.objects.filter(deadline__gte=date.today())

serializer_class = DataSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = DataFilter

在 DRF 模板中使用此过滤器集时,您需要以逗号分隔格式输入值,如下所示: enter image description here

关于python - 如何通过多个关键字从数据库中过滤DRF中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com