django-filters: Userを所属グループで検索

Django REST Frameworkとdjango-filterを使って、Userが所属しているGroupを複数指定して検索することはできます。

以下のように、django-filter.FilterSetを継承したフィルタセットを定義し、filters.ModelMultipleChoiceFilterを使って、Userが所属しているGroupを複数指定することができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from django.contrib.auth.models import User, Group
import django_filters

class UserFilter(django_filters.FilterSet):
    groups = django_filters.ModelMultipleChoiceFilter(
        field_name='groups__name',
        to_field_name='name',
        queryset=Group.objects.all()
    )

    class Meta:
        model = User
        fields = ['username', 'groups']

上記の例では、Userモデルに対するフィルタセットを定義しています。groupsフィールドには、django_filters.ModelMultipleChoiceFilterを使って、Userが所属しているGroupを複数指定することができます。field_nameには、Userモデルのgroups__nameフィールドを指定し、to_field_nameには、Groupモデルのnameフィールドを指定しています。

Graphene: フィールドのマッピングがうまくいかない