1. ホーム
  2. python

[解決済み] Django-filter、複数フィールドの検索を行うには?(django-filterで!)

2022-02-19 22:08:15

質問

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 モデルのすべてのフィールドを検索できる入力フィールドが必要です。

解決方法は?

カスタムフィルタを作成して、このようなことができるのではないでしょうか。

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 Location.objects.filter(
            Q(loc__icontains=value) | Q(loc_mansioned__icontains=value) | Q(loc_country__icontains=value) | Q(loc_modern__icontains=value)
        )

これは、これらのフィールドのいずれかを使ってフィルタリングするものです。を置き換えることができます。 icontains を好きなものに変えてください。