2017-09-02 46 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']