gpt4 book ai didi

python - Django 查询 : Request with startswith in an array

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

这是我的代码:

q =  [
"78",
"95",
"77",
"91",
"92",
"93",
"94",
"75",
"27",
"28",
"45",
"89",
"10",
"51",
"02",
"60",
"27",
]
query = reduce(operator.and_, (Q(code_postal__startswith=item) for item in q))
result = Record14.objects.filter(query)
for r in result :
print(r)

我想查询 Record14 中的所有对象,其中 code_postal 以 q 数组中的值开头。

我确定我的数据库中有数据,但是查询是空的......

我不明白为什么。

最佳答案

这里的主要问题是你使用 and_作为 reduce 运算符,这意味着您将 code_postal 指定为条件应该以 78 开头和 95同时。任何文本/数字都不能以 78 开头和 95 (和所有其他值)同时。

您可以通过使用 or_ 减少它来轻松解决此问题:

from operator import <b>or_</b>

query = reduce(<b>or_</b>, (Q(code_postal__startswith=item) for item in q))
result = Record14.objects.filter(query)

也就是说,使用 regular expression [wiki] 可能更好在这里,例如:

from re import escape as <b>reescape</b>

result = Record14.objects.filter(
code_postal<b>__regex= '^({})'.format('|'.join(map(reescape, q)))</b>
)

对于您给定的列表 q ,这将产生一个正则表达式:

^(78|95|77|91|92|93|94|75|27|28|45|89|10|51|02|60|27)

^是这里的起始 anchor ,管道充当“联合”,因此此正则表达式查找以 78 开头的列, 95 , 77

关于python - Django 查询 : Request with startswith in an array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56156484/

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