gpt4 book ai didi

django - 在 Django 中获取几个唯一的字段值

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

我有一个模型:

class MyModel(models.Model):
a = models.CharField(...)
b = models.CharField(...)

还有一些子串 "substring"要从包含这些子字符串的字段 ab 中获取所有唯一值,我可以这样做:
a_values = MyModel.objects.filter(a__icontains=substring).values_list("a", flat=True).distinct()
b_values = MyModel.objects.filter(b__icontains=substring).values_list("b", flat=True).distinct()

unique_values = list(set([*a_values, *b_values]))

是否可以用一个数据库请求重写它?

PS 澄清
从对象:
MyModel(a="x", b="y")
MyModel(a="xx", b="xxx")
MyModel(a="z", b="xxxx")

通过子字符串 "x" 我希望得到:
unique_values = ["x", "xx", "xxx", "xxxx"]

最佳答案

您可以在此处对从未单独评估的两个查询进行联合,例如:

qa = MyModel.objects.filter(a__icontains=query).values_list('a', flat=True)
qb = MyModel.objects.filter(b__icontains=query).values_list('b', flat=True)
result = list(qa.union(qb))

由于 qaqb 是惰性查询集,我们从不评估它们。将执行的查询是:
(
SELECT mymodel.a
FROM mymodel
WHERE mymodel.a LIKE %query%
)
UNION
(
SELECT mymodel.b
FROM mymodel
WHERE mymodel.b
LIKE %query%
)

此外,联合将仅选择不同的值。即使一个值同时出现在 ab 中,它也只会被检索一次。

例如:
>>> MyModel(a="x", b="y").save()
>>> MyModel(a="xx", b="xxx").save()
>>> MyModel(a="z", b="xxxx").save()
>>> query = 'x'
>>> qa = MyModel.objects.filter(a__icontains=query).values_list('a', flat=True)
>>> qb = MyModel.objects.filter(b__icontains=query).values_list('b', flat=True)
>>> list(qa.union(qb))
['x', 'xx', 'xxx', 'xxxx']

关于django - 在 Django 中获取几个唯一的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57558195/

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