我是一个初学者,并且使用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
但是在这种情况下,它仅按我在表单中输入的一个单词过滤。
答案 0 :(得分:0)
我认为您可以这样做:
首先,从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
答案 1 :(得分:0)
就我而言,我需要按多个关键字进行过滤,然后再从过滤后的qs中排除另一组关键字。
像 @Test
public void testNotATriangle(){
assertEquals(determineType(0,1,1), "Not a Triangle");
}
@Test
public void testEquilateralTriangle(){
assertEquals(determineType(1,1,1), "Equilateral Triangle");
}
// other test case here, for each condition
public static String determineType(int a, int b, int c) {
if(a >= (b+c) || c >= (b+a) || b >= (a+c) ) {
return "Not a Triangle";
} else if(a==b && b==c) {
return "Equilateral Triangle";
} else if (((a * a) + (b * b)) == (c * c) || ((a * a) + (c * c)) == (b * b)|| ((c * c) + (b * b)) == (a * a)) {
return "Right Triangle";
} else if(a!=b && b!=c && c!=a) {
return "Scalene Triangle";
} else if ((a==b && b!=c ) || (a!=b && c==a) || (c==b && c!=a)) {
return "Isosceles Triangle";
}
return null;
}
public static void main(String [] args) {
determineType(1,1,9);
}
从base_url/?kwords=kw1,kw2,kw3&exclude=e_kw1,e_kw2&others....
继承对我不起作用...这很奇怪,因为BaseInFilter是从BaseCSVFilter继承的,否则我出错了。
我的解决方案:
filters.BaseInFilter