django 过滤器 - 如何从 3 列中搜索 phone 数字

django filter - How to search a phone number form 3 columns

这是我的模型:

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 个 phone 号码。如何让过滤器查找所有 3 个 phone 数字列和 return 1 个人的所有信息?

谢谢!

您必须声明自定义过滤器并使用 method argument。在您的情况下,它类似于

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