我使用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在filters窗体中单击apply按钮时,将调用以下函数:
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请求以获取过滤后的数据:
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:
url(r"^filtered-products/",
views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")我得到的不是应用过滤器的结果,而是我的所有数据。
发布于 2018-07-15 12:08:51
url(r"^filtered-products/",
views.FilteredProductsListAPIView.as_view(), name="get-filtered-products")这里调用FilteredProductsListAPIView,您的查询是
queryset = Product.objects.all()在这个视图中,您必须定义get_queryset函数,如果您希望对数据库进行一些过滤,
def get_queryset(self):
query = SOME_FILTERING
return queryhttps://stackoverflow.com/questions/51345114
复制相似问题