Django过滤器后端


问题内容

我正在使用Django rest框架API,正在尝试通过first_name或last_name或两者都进行过滤。这是我的
ContactViewSet.py

class ContactViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    filter_backends = (DjangoFilterBackend, )
    filter_fields = ('first_name', 'last_name')
    lookup_field = 'idContact'

我的DRF设置:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}

我的actuel请求网址如下所示:

http://localhost:8000/api/v1/contacts/?first_name=Clair&last_name=Test

但是我正在寻找这样的东西:

http://localhost:8000/api/v1/contacts/?first_name=Cl**&last_name=Tes**

任何帮助,将不胜感激 ..


问题答案:

我通过如下修改类ContactFilter解决了我的问题:

import django_filters
from .models import Contact

class ContactFilter(django_filters.FilterSet):
   class Meta:
        model = Contact
        fields = {
            'first_name': ['startswith'],
            'last_name': ['startswith'],
        }
        together = ['first_name', 'last_name']

在我看来,我只需要这样做:

class ContactViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    filter_class = ContactFilter

我的请求网址如下:

http://localhost:8000/api/v1/contact/?first_name__contains=Cl&last_name__contains=Tes

但是我仍然想知道我是否可以在Django中拥有这样的东西

http://localhost:8000/api/v1/contacts/?first_name=Cl**&last_name=Tes**