使用django-filter按名字或姓氏进行过滤

5

我需要通过名字或姓氏过滤搜索用户表。

假设有一个名为John Doe Smith的用户,其中John是名字,Doe Smith是姓氏。

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

我知道这只是实现此stackoverflow答案的问题,但我如何在django-filter中实现它,并保留其他过滤字段,如电子邮件或电话?

patient.py(仅相关部分)

class Patient(TimeStampedModel):
    name = models.CharField('Name', max_length=30)
    last_name = models.CharField('Last Name', max_length=30)
    phone = models.CharField('Phone', max_length=14)

你尝试了哪些代码?你的模型是什么? - wmorrell
啊,刚刚发现了FilterSet的method参数。 - André Roggeri Campos
1个回答

6

我刚刚发现method参数是我正在寻找的答案,在这里找到

基本上我的代码就像这样结束了:

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']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接