I have ModelViewSet view in django rest framework project. I am trying to filter documents that are not live, I mean are not on main view. To filter I am using params: http://localhost:8000/documents?is_live=false
. I have list of records. After set true on one of objects I’m getting 404 error
"GET /api/documents/?is_live=false HTTP/1.1" 200
test {'pk': '2', 'partial': True}
Not Found: /api/documents/2/
Not Found: /api/documents/2/
"PATCH /api/documents/2/ HTTP/1.1" 404
"GET /api/documents/?is_live=false HTTP/1.1" 200
My view’s code and custom filter (django_filters) are below:
class DocumentFilter(dfilters.FilterSet):
is_live = dfilters.BooleanFilter(field_name='is_live')
class Meta:
model = Document
fields = ['is_live']
class DocumentViewSet(viewsets.ModelViewSet):
serializer_class = DocumentSerializer
queryset = Document.objects.all()
filterset_class = DocumentFilter
filter_backends = [filters.SearchFilter, filters.OrderingFilter, DjangoFilterBackend]
search_fields = ['title', 'category']
ordering_fields = [
'title',
'category',
]
def update(self, request, *args, **kwargs):
print("test", args, kwargs)
kwargs['partial'] = True
return super().update(request, *args, **kwargs)
@action(detail=True, methods=['patch'])
def get_queryset(self):
if self.request.query_params.get('is_live'):
return self.queryset.filter(is_live=False)
return self.queryset.filter(is_live=True)
I would like to have possibility to partial update of object on filtered view.