【问题标题】:Can not filter with django-filter无法使用 django-filter 过滤
【发布时间】:2018-12-23 00:21:29
【问题描述】:

我正在使用 django-filter 和 django rest 框架来过滤数据。我的问题是我取回了所有数据,而不是过滤后的数据。

这是使用过滤器表单呈现页面的视图:

class MyProductsFilterView(LoginRequiredMixin, FilterView):
    model = Product
    filterset_class = ProductFilter
    template_name = "products/my_products.html"
    context_object_name = "my_products"

    def get_queryset(self):
        return Product.objects.filter(user=self.request.user)

    def get_context_data(self, **kwargs):
        context = super(MyProductsFilterView, self).get_context_data(**kwargs)
        context["my_products"] = Product.objects.filter(user=self.request.user).select_related().order_by("-timestamp")
        return context

当在过滤器表单中单击应用按钮时,会调用以下函数:

function applyFilters(event) {
    event.preventDefault();
    var FiltersForm = $(".filters-form");
     $.ajax({
        type: 'GET',
        url: '/filtered-products/',
        data: FiltersForm.serialize(),
         success: function(res) {
            console.log(res)
         },
         error: function (res) {
            console.log("Error");
        }
     })
}

过滤器表单被序列化,并使用以下drf类视图发出get请求以获取过滤后的数据:

class FilteredProductsListAPIView(LoginRequiredMixin, ListAPIView):
    authentication_classes = (authentication.SessionAuthentication,)
    permission_classes = (permissions.IsAuthenticated,)

    queryset = Product.objects.all()
    serializer_class = ProductSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    filterset_class = ProductFilter

这是 drf 类的网址:

url(r"^filtered-products/",
   views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")

我没有获取应用过滤器的结果,而是获取了所有数据。

【问题讨论】:

  • 尝试将FiltersForm的值改为$(".filters-form")[0]

标签: django django-rest-framework django-filter


【解决方案1】:
url(r"^filtered-products/",
   views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")

在这里调用 FilteredProductsListAPIView ,你的查询是

queryset = Product.objects.all()

在这个视图中,你必须定义get_queryset函数,如果你想对db进行一些过滤,

def get_queryset(self):
    query = SOME_FILTERING
    return query

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2018-09-18
    • 2014-10-25
    相关资源
    最近更新 更多