这是我的代码:
communeList = [
"78",
"95",
"77",
"91",
"92",
"93",
"94",
"75",
]
commune_list_1 = list(Commune.objects.all())
commune_list = []
for c in commune_list_1 :
if c.codePostal[0:2] not in communeList :
commune_list.append([c])
CodePostal是一个有6个字符的charfield,我想通过查询返回以列表communeList的元素开头(前两个字符)的所有codepostal。
致谢
答案 0 :(得分:2)
您可以使用__startswith
例如:
from django.db.models import Q
communeList = [
"78",
"95",
"77",
"91",
"92",
"93",
"94",
"75",
]
que = Q()
for i in communeList:
que |= Q(codePostal__startswith=i)
Commune.objects.filter(que)
答案 1 :(得分:1)
您的模型不适用于此查询-您需要将邮政编码分为两部分(部门代码-2到3个字符,具体取决于它是否在DOMS-TOMS中-以及“局分布” “剩余字符的ID)。然后,您可以查询部门代码:
commune_list = Commune.objects.filter(department_code__in=communeList)
或者,也可以一起使用“ startswith”查询,或进行比较,参见Rakesh的答案,但这并不是非常有效,特别是如果您的数据库中有36000个法国公社。一次性脚本是可以的,但是如果在部门列表中进行过滤是应用程序的常用功能,则您肯定希望更改架构。
请注意,由于历史原因,this answer也不是城市标识符(您需要使用insee代码)。
-完全无关,但是-您的命名前后不一致(mixedCase + all_lower),误导性(您的三个变量基本上都被命名为“公社列表”-使得真的很难记住哪个是哪个),并最终是错误的(the第一个列表是部门代码列表,而不是公社列表)。提示:集合的良好命名约定是复数形式(“ une commune” =>“ des communes”)。