philipn / django-rest-framework-filters

Better filtering for Django REST Framework
Other
848 stars 130 forks source link

How to use the field 'in' in django-rest-framework-filters, like 'user_id__in=[12,13]'? #360

Open weiyong996 opened 1 year ago

weiyong996 commented 1 year ago

My FilterSet

class UserFilter(filters.FilterSet):
    class Meta:
        model = User
        fields = {'id': ['exact', 'in',]}

Evn

python 3.7 django 2.1.1 django-filter 2.1.0 djangorestframework 3.8.2 djangorestframework-filters 1.0.0.dev2

Issue Description

I use postman send a request

I want to match to ids (for example: Bob, Alice), the logic url is: /api/companies?user_id__in=[12,13] (I know that both '[' and ']' will be converted to %5B and %5D by browser, so true url is: /api/companies?user_id__in=%5BBob,Alice%5D)

I hope get two records by user_id__in[12,13], unfortunately I get all records, so how to resolve the problem? Is there something wrong with me?

truongvan commented 1 year ago

Use with QueryArrayWidget It supports those strings:

1. Values can be provided as csv string:  ?foo=bar,baz
2. Values can be provided as query array: ?foo[]=bar&foo[]=baz
3. Values can be provided as query array: ?foo=bar&foo=baz
Greg-Hamel commented 1 year ago

@weiyong996 For your implementation, using /api/companies?user_id__in=12,13 should give you the results you are looking for. Ensure the UserFilter is defined in the view associated to the /companies url