gpt4 book ai didi

python - Django,如何使用过滤器检查参数中是否包含字符串字段

转载 作者:行者123 更新时间:2023-12-03 19:54:28 25 4
gpt4 key购买 nike

说,我有一个带有文本字段的模型:

class SomeModel
keyword=models.CharField(null=True, max_length=255)

现在,我知道如何检查参数字符串(让我们调用变量“querystring”是否包含在 field 关键字中:
results = SomeModel.objects.filter(keyword_icontains=querystring).all()

我在 django docs 中找到的

问题,如何过滤字段值包含在查询字符串变量中的对象?

如果我的问题令人困惑,我深表歉意……也许一个例子会澄清……
在 django 文档中,如果我的关键字字段包含例如“python-django”,那么对于包含“django”的查询字符串,我可以提取包含该字段的对象
results=SomeModel.objects.filter(keyword_icontains=querystring).all()
or results=SomeModel.objets.filter(keyword_icontains='django').all()

但是说,我想提取关键字字段包含在查询字符串中的所有行/对象?例如,如果查询字符串包含“在 django 中,我如何创建过滤器”?然后我希望结果包含关键字字段具有值“django”、“filter”等的所有对象...

最佳答案

您必须将输入拆分为单词(取决于您对“单词”的定义),然后迭代它们,连接各种结果查询集(其中大部分可能为空)。

要拆分,您可以使用正则表达式,捕获所有字母和撇号(但如果有人将其用作输入而不是标准 ASCII 撇号,则会错过智能引号):

words = re.split(r"[^A-Za-z']+", querystring)

然后循环和过滤:
query = Q()  # empty Q object
for word in words:
# 'or' the queries together
query |= Q(keyword_icontains=word)
results = SomeModel.objects.filter(query).all()

上面的代码未经测试,我想到了“或”查询和来自 this answer 的空 Q() 的想法。 .

根据您的下一步,在每个循环步骤中直接评估查询,附加到 results列表,可能更适合您(使用例如 itertools.chain ,根据 this answer )。

关于python - Django,如何使用过滤器检查参数中是否包含字符串字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37781832/

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