【问题标题】:Filter by first name OR last name using django-filter使用 django-filter 按名字或姓氏过滤
【发布时间】:2017-09-02 00:35:44
【问题描述】:

我需要按名字或姓氏搜索用户表过滤。

给定一个用户 John Doe Smith,其中 John 是名字,Doe Smith 是姓氏。

当我搜索 John Smith 时,它应该会找到上面的用户。

我知道这只是实现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)

【问题讨论】:

  • 你试过什么代码?你的型号是什么?
  • 啊,刚刚发现FilterSet的method参数

标签: python django-filter


【解决方案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']

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 2016-02-22
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多