【发布时间】:2021-09-05 02:52:00
【问题描述】:
假设我有 2 个字段 ["id", "name"]。
我想使用django-filter 过滤我的ModelViewSet 中的查询集。
这是我的自定义FilterSet:
from django_filters import rest_framework as filters
from store.models import Partner
class PartnerFilter(filters.FilterSet):
""" Custom Partner Filter Set """
name = filters.CharFilter(field_name="name", lookup_expr="icontains")
class Meta:
model = Partner
fields = ["id", "name"]
这是我的ModelViewSet:
class PartnerViewSet(ModelViewSet):
""" Partner View Set """
serializer_class = PartnerSerializer
queryset = Partner.objects.select_related("user").all()
permission_classes = [IsAuthenticated,]
authentication_classes = [SessionAuthentication]
filter_backends = [DjangoFilterBackend,]
filterset_class = PartnerFilter
我需要的是只使用一个查询字符串来过滤查询集。我不希望我的网址像.../?id=&name=string。
我想要这样的东西:.../?search=search_value 如果它匹配任何id 然后它通过 id 获取对象,或者如果它匹配name 然后它通过姓名。
如何在django-filter 中实现此功能?
有没有办法在不覆盖ModelViewSet 中的get_queryset 方法的情况下做到这一点?
【问题讨论】:
标签: django django-rest-framework django-filter