Django-filter,如何进行多字段搜索? (使用 django 过滤器!)

新手上路,请多包涵

如何使用 Django-filter 从模型中进行多个字段搜索,例如:

 class Location(models.Model):
    loc = models.CharField(max_length=100, blank=True)
    loc_mansioned = models.CharField(max_length=100, blank=True)
    loc_country = models.CharField(max_length=100, blank=True)
    loc_modern = models.CharField(max_length=100, blank=True)

我的网站上需要一个输入字段,可以搜索 Location 模型的所有字段

原文由 Medevin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 946
2 个回答

您或许可以创建一个自定义过滤器并执行以下操作:

 from django.db.models import Q
import django_filters

class LocationFilter(django_filters.FilterSet):
    q = django_filters.CharFilter(method='my_custom_filter', label="Search")

    class Meta:
        model = Location
        fields = ['q']

    def my_custom_filter(self, queryset, name, value):
        return queryset.filter(
            Q(loc__icontains=value) | Q(loc_mansioned__icontains=value) | Q(loc_country__icontains=value) | Q(loc_modern__icontains=value)
        )

这将按这些字段中的任何一个进行过滤。您可以将 icontains 替换为您想要的任何内容。

原文由 Dalvtor 发布,翻译遵循 CC BY-SA 4.0 许可协议

太棒了。我正在尝试做一个动态过滤器,如果选中,可以使用一个开关在搜索中获得更多字段。是这样的:

 def my_custom_filter(self, queryset, name, value):
    return Reference.objects.filter(
        Q(ref_title__icontains=value))

def my_custom_filter_with_description(self, queryset, name, value):
    return Reference.objects.filter(
        Q(ref_title__icontains=value) | Q(complete_description__icontains=value))

但我不知道如何将开关链接到班级

原文由 Grégoire Rouet 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏