2017-09-02 13 views
1

姓または名でユーザテーブルフィルタリングを検索する必要があります。django-filterを使用してファーストネームまたは姓のフィルタを使用する

ユーザがJohn Doe Smithの場合、JohnはFirst Name、Doe SmithはLast Nameです。

John Smithを検索すると、上記のユーザーが見つかります。

django-filterにもemailまたはphoneのような他のフィルタフィールドを保つことを私はthis SO answerのソリューションを実装するそのだけの問題ということを知っているが、私はどうすればよいですか?

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'] 
関連する問題