Фильтр Django - Как искать номер телефона из 3 столбцов - PullRequest
0 голосов
/ 18 апреля 2019

Вот моя модель:

HomePhone = models.CharField(max_length=12, null=True)
Phone2 = models.CharField(max_length=12, null=True)
Phone3 = models.CharField(max_length=12, null=True)

Вот фильтр:

class optionFilter(django_filters.FilterSet):
    class Meta:
        model = option2019
        fields = {
            'LastName': ['icontains',],
            'FirstName':['icontains',],
            'aidecode':['exact',],
            'SSN':['icontains',],
            'HomePhone':['exact',],
            }

В модели у каждого будет 3 телефонных номера. Как заставить фильтр искать все 3 столбца телефонных номеров и возвращать всю информацию для 1 человека?

Спасибо!

1 Ответ

1 голос
/ 18 апреля 2019

Вы должны объявить пользовательский фильтр и использовать аргумент method .В вашем случае это будет что-то вроде

import django_filters
from django.db.models import Q


class optionFilter(django_filters.FilterSet):
    phone = django_filters.CharFilter(method='phone_filter')

    class Meta:
        model = option2019
        fields = {
            'LastName': ['icontains',],
            'FirstName':['icontains',],
            'aidecode':['exact',],
            'SSN':['icontains',],
            'phone': ['exact',],
            }

    def phone_filter(self, queryset, name, value):
        return queryset.filter(Q(HomePhone=value) | Q(Phone2=value) | Q(Phone3=value))
...