gpt4 book ai didi

python - Django - 将代码转换为 Django 查询?

转载 作者:行者123 更新时间:2023-11-29 14:03:51 30 4
gpt4 key购买 nike

因此,我在我的一个模型上进行了这个 django 查询,并且我有一些额外的 python 代码,用于在每个查询之间执行额外的工作。我正在寻求一些帮助,以将这段代码转换为单个 Django 查询,因为我知道您应该让数据库完成大部分工作。

查询代码如下。

keywords = []
if query:
results = []
keywords = query.split()
for x in keywords:
res = Textbook.objects.filter(Q(class_name__icontains=x) |
Q(textbook_name__icontains=x) |
Q(author__icontains=x) |
Q(isbn__icontains=x))
if len(results) == 0:
results = res
else:
results = set(results) & set(res)

numresults = len(results)

所以查询是我从用户那里获取的信息。我将此信息拆分为关键字,并对每个关键字进行查询。他们正在搜索教科书,因此如果他们输入的任何词与书的 isbn、书名、类(class)名称或作者相匹配,它就会被添加到结果中。但是,如果他们使用多个词,我只会在两个词都将书作为查询返回时才将其添加到结果中。这就是 results = set(results) & set(res) 所做的。如果当前结果和新查询返回同一本书,则将其保留在结果中。

我知道这很糟糕,所以我正在寻找改进它的方法。

最佳答案

您可以在循环中执行额外的过滤器而不是设置交集:

keywords = []
if query:
results = []
keywords = query.split()
query = Textbook.objects.all()
for x in keywords:
query = query.filter(Q(class_name__icontains = x) | Q(textbook_name__icontains = x) | Q(author__icontains = x) | Q(isbn__icontains = x))

numresults = len(query)

由于 Django 的 QuerySets 是惰性的,SQL 调用应该推迟到 numresults = len(query)

关于python - Django - 将代码转换为 Django 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32979790/

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