gpt4 book ai didi

python - 我如何在 django Rest 框架中的查询参数中创建 OR 运算符

转载 作者:行者123 更新时间:2023-12-01 04:52:31 24 4
gpt4 key购买 nike

如果我需要在 Django Rest 中进行过滤,那么我通常会这样做

class ProductFilter(django_filters.FilterSet):
min_price = django_filters.NumberFilter(name="price", lookup_type='gte')
max_price = django_filters.NumberFilter(name="price", lookup_type='lte')
class Meta:
model = Product
fields = ['category', 'in_stock', 'min_price', 'max_price']

class ProductList(generics.ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_class = ProductFilter

我可以使用像

http://example.com/api/products?category=clothing&max_price=10.00

但这会AND

我怎样才能做到这一点或从像这样的网址

其中(类别 = 服装 || max_price = 10)

基本上我应该能够提供 URL 中的所有参数,例如

http://example.com/api/products? AND=[{category: clothing}, {age: 10}], OR=[{age_gte:10}]

最佳答案

好的,您需要在 url 中传递一些标志来检查是否要执行混合查询。还要在params中添加前缀,如果age=20需要在AND运算符中使用,则添加前缀'and_',看起来像and_age=20等等。 OR 参数也是如此。

让我们拥有这个网址

http://example.com/api/products?and_category=clothing&and_max_price=10.00&or_age=20&mixed=true

现在,我们的观点。

class ProductList(generics.ListAPIView):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_class = ProductFilter

def get_queryset(self):
data = self.request.DATA
mixed_query = data.get('mixed',None)

if not mixed_query:
return self.queryset
and_params = {}
for key in data:
if 'and_' in key:
and_params[key] = data[key]


queryset = Products.objects.filter(**and_params)
for key in self.request.DATA:
if 'or_' in key:
queryset = queryset | Products.objects.filter(key=data[key])

return queryset

注意:自版本 3.0 起,request.DATA 已被弃用,取而代之的是 request.data

关于python - 我如何在 django Rest 框架中的查询参数中创建 OR 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28103095/

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