Search code examples
djangodjango-filters

How to filter custom urls in ModelViewSet with django-filters


class ExportTabView(ModelViewSet):
    permission_classes = [UserHasDatasetChangeAccess]
    queryset = JobTable.objects.all()
    filterset_fields = [
        "job_type",
        "action",
        "source_table__name",
        "source_table__type",
    ]
    ordering_fields = ["created_on", "modified_on"]
    ordering = ["-modified_on"]

I am able to use django filters with above api as :

/api/export-tab-view?source_table__name='temp'

But after adding custom urls in this model view set, I am not able to use django filters .

class ExportTabView(ModelViewSet):
    serializer_class = ExportTabSerializer
    permission_classes = [UserHasDatasetChangeAccess]
    queryset = JobTable.objects.all()
    filterset_fields = [
        "job_type",
        "action",
        "source_table__name",
        "source_table__type",
    ]
    ordering_fields = ["created_on", "modified_on"]
    ordering = ["-modified_on"]

    @action(detail=False)
    def export_dataset(self, request, id=None):
    """
    Returns a list of all the relationship names that the given
    dataset has
    """
        jobs = JobTable.objects.filter(
        dataset=get_object_or_404(DataSet, id=self.request.META.get(DATASET_ID, ""))
        )
        return Response(ExportTabSerializer(jobs, many=True).data)

Now filters are not working when i call api

/api/export-tab-view/export_dataset?source_table__name='temp'

Solution

  • I have done this way and its working fine for now.

    @action(detail=False)
    def export_dataset(self, request, id=None):
        """
        Returns a list of all the relationship names that the given
        dataset has
        """
        jobs = JobTable.objects.filter(
            dataset=get_object_or_404(DataSet, id=self.request.META.get(DATASET_ID, "")),
        **dict(request.query_params.items()))
        return Response(ExportTabSerializer(jobs, many=True).data)