Django Query using使用包含列表作为源?

时间:2016-12-09 11:58:45

标签: python django

我有一个邮政编码列表,例如: -

postcodes = ['LDN 4DN','MAN 4RF']

地址字段中包含邮政编码,样本地址字段为

'p downing street,London,England,LDN 4DN' '10大道,曼彻斯特,英格兰,MAN 4RF' '20 Highalnds,Scotland,SCT L40'

我正在使用

site = SiteData.objects.filter(address__icontains=postcodes[0]))

在获取每个站点的循环中,但这似乎有点冗长,是否可以包含?

我可以运行一个查询来获取列表中两个邮政编码的记录吗?

由于

2 个答案:

答案 0 :(得分:9)

显然这不起作用 - 但是你可以使用models.Q建立一个"或者#34;查询:

import operator

clauses = (Q(address__icontains=p) for p in postcodes)
query = reduce(operator.or_, clauses)
site = SiteData.objects.filter(query)

答案 1 :(得分:0)

您可以使用 Django 的 Overlap 过滤器来实现这一点。

来自docs

<块引用>

返回数据与传递的值共享任何结果的对象。使用 SQL 运算符 &&。

所以,你可以试试:

site = SiteData.objects.filter(address__overlap=postcodes))