2017-09-02 49 views
1

我需要通过名或姓搜索用户表过滤。使用django-filter过滤名或姓

给定用户John Doe Smith,其中John是First Name,Doe Smith是Last Name。

当我搜索约翰史密斯时,它应该找到上面的用户。

我知道它只是贯彻this SO answer解决的问题,但如何我这样做,在django-filter,并保持其他筛选字段像emailphone也?

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) 
+0

什么代码你尝试过吗?你的模型是什么? – wmorrell

+0

啊,刚刚发现了FilterSet的'method'参数 –

回答

1

我刚刚发现method参数是什么,我一直在寻找found here

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

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