【问题标题】:How to use same same django_filters.CharFilter field for two separate fields如何为两个单独的字段使用相同的 django_filters.CharFilter 字段
【发布时间】:2019-08-27 06:20:16
【问题描述】:

所以,基本上我有一个与 django-tables2 一起使用的 FilterSet。现在我需要使用一个 char 字段,它应该从模型中搜索两个单独的字段。

例如:

ip_addr = django_filters.CharFilter(lookup_expr='icontains')
virtual_ip = django_filters.CharFilter(lookup_expr='icontains')

上面是我当前的过滤器集。这两个都被渲染到模板中的两个单独的字段中。但我想在前端将它们组合成一个字段,在 ip_addr 或 virtual_ip 中查找。

谁能指出我正确的方向。

【问题讨论】:

    标签: django python-3.x django-filter django-tables2


    【解决方案1】:

    您可以在自定义方法中使用 Q 对象创建复杂的查找,以过滤多个字段,如下所示:

    from django.db.models import Q
    # ..your other imports..
    
    YouFilterSet(django_filters.FilterSet):
        # ip_addr = django_filters.CharFilter(lookup_expr='icontains')
        # virtual_ip = django_filters.CharFilter(lookup_expr='icontains')
        my_lookup_field = django_filters.CharFilter(label='ip', method='my_lookup_method')
    
        class Meta:
            # ..your meta attributes..
    
        def my_lookup_method(self, queryset, name, value):
            return queryset.filter(Q(ip_addr__icontains=value)|Q(virtual_ip__icontains=value))
    

    这将在您的 ip_addr 或 virtual_ip 字段中返回带有您的值的Queryset。有关更多信息,您可以查看文档 here 获取 Q 对象以及 herehere 获取过滤器中的自定义方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 2015-04-25
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多