gpt4 book ai didi

python - Django 使用 icontains 过滤器来过滤字典中的多个值

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:12 25 4
gpt4 key购买 nike

嗨,我正在尝试通过我得到的字典数据运行模型搜索查询:

{
"city":5,
"direction":"ne",
..other data that can be dynamic...
"address__icontains" = ["word1", "word2", "word3"],
}

我的搜索查询:

 Models.objects.filter(**query_dict)

由于其他数据是动态,这就是为什么我将过滤器与字典一起使用。并且我使用__icontains来搜索字段地址(字符串值)包含该字符串中的这 3 个单词,所以现在的问题是因为 __icontains 不接受 array 就像查询集中的那样:

Models.objects.filter(other keys and values from dictionary, address__icontains= ["word1", "word2", "word3"])

我如何使用字典过滤器搜索来实现此功能?

我在 dict 中的数据有 3 种类型 string、int 和 list(1 个用于范围搜索,另一个用于 icontains 搜索)我想将字典搜索与 icontains AND 搜索结合起来

我还尝试将字典更改为

"address__icontains" = "word1 word2 word3"

但它也不起作用

示例数据:

我正在做的是找到一个具有地址字段的特性,其中包含城市、街道、行政区和区等动态数据

例如:

Đường ĐT 9(street), Xã Mỹ Hạnh Nam(ward), Đức Hòa(district), Long An(city)

它还有其他数据,例如在范围之间搜索的 Direction="ne"和 specials 数据,因此在字典中具有诸如 "size__range": [0,1000] 之类的键

例如,如果“address__icontains”= [“Long An”,“Đức Hòa”,“Xã Mỹ Hạnh Nam”],那么它应该返回上面带有该地址的属性项,direction =“ne"且大小的值介于 0 到 1000 之间

感谢您的阅读

最佳答案

这应该可以解决问题:

from operator import or_
from django.db.models import Q
from functools import reduce

instance = Model.objects.all()
def queryset_filter(instance, kwargs):
for key, value in kwargs.items():
if isinstance(value, list):
instance.filter(reduce(or_, (Q(key=x) for x in value))
else:
instance.filter(key=value)
return instance

您可以通过这种方式进行一些额外的迭代,但是如果您的代码需要更复杂的过滤(例如使用表单中的查询集),那么您无论如何都需要以这种方式进行迭代。

关于python - Django 使用 icontains 过滤器来过滤字典中的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58214080/

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