如何在Django Rest框架中搜索列表中具有特定值的查询集 我想做什么

如何在Django Rest框架中搜索列表中具有特定值的查询集 我想做什么,django,filter,django-rest-framework,Django,Filter,Django Rest Framework,获取列表中具有特定值的所有查询集,该列表为ManyToManyField 简而言之,如果我键入http://localhost:8000/api/pickup/?choosingUser=5,我想获得所有匹配的choosingUser=5拾取位置choosingUser来自ManyToManyField,因此picku\u-Places模型类似于choosingUser=[2,3,5,7] 问题 我无法通过列表中的特定值搜索查询集 当我键入http://localhost:8000/api/pi

获取列表中具有特定值的所有查询集,该列表为
ManyToManyField

简而言之,如果我键入
http://localhost:8000/api/pickup/?choosingUser=5
,我想获得所有匹配的
choosingUser=5
拾取位置
choosingUser
来自
ManyToManyField
,因此
picku\u-Places
模型类似于
choosingUser=[2,3,5,7]

问题 我无法通过
列表中的特定值搜索查询集
当我键入
http://localhost:8000/api/pickup/?choosingUser=5
,我得到所有查询集,其中包括那些没有
choosingUser=5
的查询集

我正在使用
django_过滤器
来过滤查询集。我阅读了文档,但找不到如何通过列表中的值获取查询集

如果可以的话,你能告诉我怎么做吗

多谢各位

======================================================

我的代码是这样的

models.py

class PickUp_Places(models.Model):
    name = models.CharField(max_length=200, unique=True)
    choosing_user = models.ManyToManyField(
        settings.AUTH_USER_MODEL, related_name="pick_up")

    def __str__(self):
        return self.name

    class Meta:
        db_table = "pickup_places"
序列化程序.py

class PickUp_PlacesSerializer(serializers.ModelSerializer):

    class Meta:
        model = PickUp_Places
        fields = "__all__"
views.py

class PickUp_PlacesViewSet(viewsets.ModelViewSet):
    queryset = PickUp_Places.objects.all()
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly
    ]
    serializer_class = PickUp_PlacesSerializer

    filter_backends = [filters.DjangoFilterBackend]
    filterset_fields = "__all__"

要从
url
override
get\u queryset
方法获取
choosingUser

def get_queryset(self):
    choosingUser = self.request.query_params.get('choosingUser')
    queryset = choosingUser is not None and PickUp_Places.objects.filter(choosing_user__id=choosingUser) or PickUp_Places.objects.all()
    return queryset
详细版本:

def get_queryset(self):
    choosingUser = self.request.query_params.get('choosingUser')
    if choosingUser is not None:      
        queryset = PickUp_Places.objects.filter(choosing_user__id=choosingUser)
    else:
        queryset = PickUp_Places.objects.all()
    return queryset

基于M2M字段添加过滤器的一种方法是将
filter\u字段
添加到视图集中,类似于:

class PickUp_PlacesViewSet(viewsets.ModelViewSet):
    queryset = PickUp_Places.objects.all()
    permission_classes = [
        permissions.IsAuthenticatedOrReadOnly
    ]
    serializer_class = PickUp_PlacesSerializer

    filter_backends = [filters.DjangoFilterBackend]
    filter_fields = ('choosing_user', )
然后使用
http://localhost:8000/api/pickup/?choosing_user=5
当选择user时,它将返回用户id为5的所有位置。 如果要基于多个
选择用户进行筛选,可以执行以下操作:

class PickUp_PlacesViewSet(viewsets.ModelViewSet):
        queryset = PickUp_Places.objects.all()
        permission_classes = [
            permissions.IsAuthenticatedOrReadOnly
        ]
        serializer_class = PickUp_PlacesSerializer
    
        filter_backends = [filters.DjangoFilterBackend]
        filter_fields = {
                'choosing_user__id': ['in',]
                }

并使用
http://localhost:8000/api/pickup/?choosing_user=5,1,2
来过滤多个ID。

谢谢你教我这个。现在它运行良好,我只能得到具有特定值的
picku\u Place
模型。但是,
http://localhost:8000/api/pickup
这是一个用于获取所有
皮卡位置的url
模型不起作用。。。为什么会发生这种情况?@Toshi023Yuki这是因为
choosingUser
在该url中是
None
。现在,我已经更新了我的回答plz评论,如果您在理解上有任何问题,请告诉我。谢谢您的回复。一切正常。多亏了你,我才知道我想要什么。你是救命恩人!非常感谢。谢谢你的评论。我试过你教我的,但没用。