Python 使用django筛选器按名字或姓氏筛选

Python 使用django筛选器按名字或姓氏筛选,python,django-filter,Python,Django Filter,我需要搜索按名字或姓氏筛选的用户表 给定一个用户John Doe Smith,其中John是名字,Doe Smith是姓氏 当我搜索John Smith时,它应该会找到上面的用户 我知道这只是实现的解决方案的问题,但我如何在django filter中实现这一点,并保留其他筛选字段,如email或phone patient.py(仅相关部分) 我刚刚发现方法参数就是我要找的 基本上我的代码是这样结束的: class PatientFilter(FilterSet): name = Cha

我需要搜索按名字或姓氏筛选的用户表

给定一个用户John Doe Smith,其中John是名字,Doe Smith是姓氏

当我搜索John Smith时,它应该会找到上面的用户

我知道这只是实现的解决方案的问题,但我如何在
django filter
中实现这一点,并保留其他筛选字段,如
email
phone

patient.py
(仅相关部分)


我刚刚发现
方法
参数就是我要找的

基本上我的代码是这样结束的:

class PatientFilter(FilterSet):
    name = CharFilter(name='name', lookup_expr='icontains')
    last_name = CharFilter(name='last_name', lookup_expr='icontains')
    phone = CharFilter(name='phone', lookup_expr='icontains')
    full_name = CharFilter(name='full_name', method='search_by_full_name')

    def search_by_full_name(self, qs, name, value):
        for term in value.split():
            qs = qs.filter(Q(name__icontains=term) | Q(last_name__icontains=term))
        return qs

    class Meta:
        model = Patient
        fields = ['name', 'last_name', 'phone']

你试过什么代码?你的模型是什么?啊,刚刚发现过滤器集的
方法
参数
class PatientFilter(FilterSet):
    name = CharFilter(name='name', lookup_expr='icontains')
    last_name = CharFilter(name='last_name', lookup_expr='icontains')
    phone = CharFilter(name='phone', lookup_expr='icontains')
    full_name = CharFilter(name='full_name', method='search_by_full_name')

    def search_by_full_name(self, qs, name, value):
        for term in value.split():
            qs = qs.filter(Q(name__icontains=term) | Q(last_name__icontains=term))
        return qs

    class Meta:
        model = Patient
        fields = ['name', 'last_name', 'phone']