且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Django Rest Framework ManyToMany过滤多个值

更新时间:2023-09-04 11:10:04

您可以链接过滤器.例如,如果您需要所有标签都包含 1 2 值的用户,则可以编写如下查询:

You can chain filters. For example, if you need all users which labels contain both 1 and 2 values, you can write a query like so:

User.objects.filter(labels=1).filter(labels=2)

django-filters 默认情况下不支持此类查询,因此您需要自定义过滤器.

django-filters does not support queries like this by default so you need a custom filter.

class M2MFilter(django_filters.Filter):

    def filter(self, qs, value):
        if not value:
            return qs
    
        values = value.split(',')
        for v in values:
            qs = qs.filter(labels=v)
        return qs


class UserFilter(django_filters.FilterSet):
    labels = M2MFilter(name='labels')

    class Meta:
        model = User
        fields = ('labels',)

现在,您可以用逗号分隔标签ID,并获得所需的信息

Now you can write labels id's comma-separated and get exactly what you need

/api/users/?labels=1,2

关于m2m查询的好答案