【问题标题】:How to filter custom urls in ModelViewSet with django-filters如何使用 django-filters 过滤 ModelViewSet 中的自定义 url
【发布时间】:2023-03-04 12:44:02
【问题描述】:
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"]

我可以使用带有上述 api 的 django 过滤器:

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

但在此模型视图集中添加自定义 url 后,我无法使用 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'

【问题讨论】:

    标签: django django-filters


    【解决方案1】:

    您可以通过这样做来过滤数据集,但这取决于您要查询的 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)
    

    【讨论】:

      【解决方案2】:

      我已经这样做了,现在它工作正常。

      @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)
      

      【讨论】:

      • 如果它对您有用,请将其标记为已接受的答案,以便它也有助于他人受益。
      • 我无法接受自己的答案。
      • 您至少可以将其标记为已接受的答案,而不是投票给您的答案
      • 2天后才能接受
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2018-01-20
      • 2018-03-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多