首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用django-filter进行筛选

无法使用django-filter进行筛选
EN

Stack Overflow用户
提问于 2018-07-15 11:55:06
回答 1查看 335关注 0票数 0

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

这是使用筛选器窗体呈现页面的视图:

代码语言:javascript
复制
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

在filters窗体中单击apply按钮时,将调用以下函数:

代码语言:javascript
复制
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");
        }
     })
}

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
url(r"^filtered-products/",
   views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")

我得到的不是应用过滤器的结果,而是我的所有数据。

EN

回答 1

Stack Overflow用户

发布于 2018-07-15 12:08:51

代码语言:javascript
复制
url(r"^filtered-products/",
   views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")

这里调用FilteredProductsListAPIView,您的查询是

代码语言:javascript
复制
queryset = Product.objects.all()

在这个视图中,您必须定义get_queryset函数,如果您希望对数据库进行一些过滤,

代码语言:javascript
复制
def get_queryset(self):
    query = SOME_FILTERING
    return query
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51345114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档