django过滤器 - 如何从3列搜索电话号码

问题描述 投票:0回答:1

这是我的模型:

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个人的所有信息?

谢谢!

django django-filter
1个回答
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))
© www.soinside.com 2019 - 2024. All rights reserved.