我有一个邮政编码列表,例如: -
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]))
在获取每个站点的循环中,但这似乎有点冗长,是否可以包含?
我可以运行一个查询来获取列表中两个邮政编码的记录吗?
由于
答案 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))