@@ -10,23 +10,38 @@ class InviteFilter(filters.FilterSet):
1010 Adds filtering to DRF list retrieve views
1111
1212 Parameters to filter by:
13- project (int), user (default to request.user if not set otherwise) (int)
13+ project (int),
14+ user (default to request.user if not set otherwise) (int),
15+ user=any (disable user filter)
1416
1517 Examples:
1618 ?project=1 equals to .filter(project_id=1)
1719 (no params passed) equals to .filter(user=request.user)
1820 ?user=4 equals to .filter(user_id=4)
21+ ?project=1&user=any equals to .filter(project_id=1)
1922 """
2023
2124 def __init__ (self , * args , ** kwargs ):
2225 super ().__init__ (* args , ** kwargs )
2326 self .data = dict (self .data )
2427 request = kwargs .get ("request" )
2528 if request and request .user .is_authenticated :
26- self .data ["user" ] = request .user .id
29+ user_value = self .data .get ("user" )
30+ if isinstance (user_value , list ):
31+ user_value = user_value [0 ] if user_value else None
32+ if user_value is None :
33+ self .data ["user" ] = request .user .id
34+
35+ @staticmethod
36+ def filter_user (queryset , name , value ):
37+ if isinstance (value , list ):
38+ value = value [0 ] if value else None
39+ if value in (None , "" , "any" ):
40+ return queryset
41+ return queryset .filter (user_id = value )
2742
2843 project = filters .Filter (method = project_id_filter )
29- user = filters .NumberFilter ( field_name = "user_id " )
44+ user = filters .Filter ( method = "filter_user " )
3045
3146 class Meta :
3247 model = Invite
0 commit comments