Skip to content

Commit 642b64a

Browse files
fix(api): exclude user_state_details JSONField from UserContactInfo filterset
The new user_state_details JSONField broke UserContactInfoViewSet, which used filterset_fields = "__all__". django-filter's AutoFilterSet cannot build a filter for a JSONField and raised: AssertionError: AutoFilterSet resolved field 'user_state_details' with 'exact' lookup to an unrecognized field type JSONField. Replace the auto filterset with an explicit ApiUserContactInfoFilter that excludes the field (internal UI state, not meant to be filtered); all other fields keep their previous auto-filter behaviour.
1 parent 01cbf57 commit 642b64a

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

dojo/user/api/filters.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
from django_filters import OrderingFilter
33
from django_filters import rest_framework as filters
44

5+
from dojo.models import UserContactInfo
6+
57
User = get_user_model()
68

79

@@ -42,3 +44,12 @@ class Meta:
4244
("last_login", "last_login"),
4345
),
4446
)
47+
48+
49+
class ApiUserContactInfoFilter(filters.FilterSet):
50+
class Meta:
51+
model = UserContactInfo
52+
# user_state_details is an internal JSONField for UI state; django-filter
53+
# cannot auto-generate a filter for it, so exclude it (everything else
54+
# keeps the previous "__all__" auto-filter behaviour).
55+
exclude = ["user_state_details"]

dojo/user/api/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from dojo.api_v2.views import DojoModelViewSet, PrefetchDojoModelViewSet, schema_with_prefetch
1414
from dojo.authorization import api_permissions as permissions
1515
from dojo.models import UserContactInfo
16-
from dojo.user.api.filters import ApiUserFilter
16+
from dojo.user.api.filters import ApiUserContactInfoFilter, ApiUserFilter
1717
from dojo.user.api.serializer import (
1818
UserContactInfoSerializer,
1919
UserProfileSerializer,
@@ -71,7 +71,7 @@ class UserContactInfoViewSet(
7171
serializer_class = UserContactInfoSerializer
7272
queryset = UserContactInfo.objects.none()
7373
filter_backends = (DjangoFilterBackend,)
74-
filterset_fields = "__all__"
74+
filterset_class = ApiUserContactInfoFilter
7575
permission_classes = (permissions.IsSuperUser, DjangoModelPermissions)
7676

7777
def get_queryset(self):

0 commit comments

Comments
 (0)