gpt4 book ai didi

django-views - 如何使用带有mongoengine的django rest过滤进行列表过滤

转载 作者:行者123 更新时间:2023-12-04 04:45:57 25 4
gpt4 key购买 nike

views.py

from __future__ import unicode_literals

from rest_framework_mongoengine.viewsets import ModelViewSet as MongoModelViewSet

from app.serializers import *

from rest_framework_mongoengine.generics import *

from rest_framework import filters


def index_view(request):
context = {}
return TemplateResponse(request, 'index.html', context)


class ToolViewSet(MongoModelViewSet):
serializer_class = ToolSerializer
my_filter_fields = ('crop', 'district','taluka','circle','year',)

def get_kwargs_for_filtering(self):
filtering_kwargs = {}

for field in self.my_filter_fields: # iterate over the filter fields
field_value = self.request.query_params.get(field) # get the value of a field from request query parameter
if field_value:
filtering_kwargs[field] = field_value
return filtering_kwargs

def get_queryset(self):
queryset = Tool.objects.all()
filtering_kwargs = self.get_kwargs_for_filtering() # get the fields with values for filtering
if filtering_kwargs:
queryset = Tool.objects.filter(**filtering_kwargs) # filter the queryset based on 'filtering_kwargs'
return queryset

这是我的代码。

它的作用是准确过滤我们想要搜索的内容。

例如:http://api/tool/?district=Nasik&crop=banana

但是,它不适用于列表文件例如:http://api/tool/?district=Nasik&district=Pune这给出了输出:[](空)

如何让这个过滤器工作以获得所有地区“Nasik”或地区“Pune”

如果我搜索http://api/tool/?crops=guava,banana,您能帮我更改代码以获取数据吗?或者 http:../tool/?district=Nasik,Pune
给我正确的输出?

最佳答案

我建议看看 django-rest-framework-filters .然后,您可以在查询参数中使用诸如 __in 之类的东西...

但是如果您想继续使用您的方法,我会在您的 get_kwargs_for_filtering 方法中添加逻辑,如下所示:

def get_kwargs_for_filtering(self):
filtering_kwargs = {}

for field in self.my_filter_fields: # iterate over the filter fields
field_value = self.request.query_params.get(field) # get the value of a field from request query parameter
if field_value:
if ',' in field_value: # put your queryParams into an array and use the built-in django filter method '__in'
filtering_kwargs[field + '__in'] = field_value.split(',')
else:
filtering_kwargs[field] = field_value
return filtering_kwargs

有了这个,调用http://api/tool/?crops=guava,banana应该产生所需的行为。我无法测试它现在是否有效,但这应该会引导您走向正确的方向。

关于django-views - 如何使用带有mongoengine的django rest过滤进行列表过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com