Как фильтровать пользовательские URL в ModelViewSet с помощью 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"]

Я могу использовать фильтры django с вышеуказанным api как :

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

Но после добавления пользовательских урлов в этот набор представлений модели, я не могу использовать фильтры django .

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)

Теперь фильтры не работают, когда я вызываю api

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

Вы можете фильтровать набор данных, делая это, но это зависит от того, какое поле объекта DataSet вы хотите запросить! Я предполагаю, что если вы хотите сделать queryset модели DataSet, предполагая, что имя поля является dataset, введите его в фильтр следующим образом:

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

Я сделал этот способ и он работает нормально на данный момент.

@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)
Вернуться на верх