Django ORM 搜索多条件查询
Django ORM Search Multiple Conditional Query
当我想用多个条件搜索我的查询集时遇到问题。在我的数据库中,hscode 保存为 "0105.14.90"
。我需要按照此查询 "01051490"
搜索 hscode。例如:
>>> query = '0105.14.90'
>>> HSCode.objects.filter(hscode=query)
<QuerySet [<HSCode: 0105.14.90>]>
>>> query = '01051490'
>>> HSCode.objects.filter(hscode=query)
<QuerySet []>
我认为最糟糕的是,看起来像这样:
hscodes = []
query = '01051490'
for hscode in HSCode.objects.order_by('-id'):
if query.isdigit() and hscode.hscode == query:
hscodes.append(hscode)
elif hscode.hscode.replace('.', '') == query:
hscodes.append(hscode)
只用ORM如何处理?
>>> query = '01051490'
>>> HSCode.objects.filter(Q(hscode=query) | Q(???))
<QuerySet [<HSCode: 0105.14.90>]>
你可以试试Replace
。
from django.db.models import Value
from django.db.models.functions import Replace
query = '01051490'
HSCode.objects.annotate(
hscode_without_dots=Replace('hscode', Value('.'), Value(''))
).filter(hscode_without_dots=query)
当我想用多个条件搜索我的查询集时遇到问题。在我的数据库中,hscode 保存为 "0105.14.90"
。我需要按照此查询 "01051490"
搜索 hscode。例如:
>>> query = '0105.14.90'
>>> HSCode.objects.filter(hscode=query)
<QuerySet [<HSCode: 0105.14.90>]>
>>> query = '01051490'
>>> HSCode.objects.filter(hscode=query)
<QuerySet []>
我认为最糟糕的是,看起来像这样:
hscodes = []
query = '01051490'
for hscode in HSCode.objects.order_by('-id'):
if query.isdigit() and hscode.hscode == query:
hscodes.append(hscode)
elif hscode.hscode.replace('.', '') == query:
hscodes.append(hscode)
只用ORM如何处理?
>>> query = '01051490'
>>> HSCode.objects.filter(Q(hscode=query) | Q(???))
<QuerySet [<HSCode: 0105.14.90>]>
你可以试试Replace
。
from django.db.models import Value
from django.db.models.functions import Replace
query = '01051490'
HSCode.objects.annotate(
hscode_without_dots=Replace('hscode', Value('.'), Value(''))
).filter(hscode_without_dots=query)