首页 > 解决方案 > Django ORM 搜索多个条件查询

问题描述

当我想用多个条件搜索我的查询集时遇到问题。在我的数据库中,hscode 保存为"0105.14.90". 我需要按照这个查询来搜索 hscode "01051490"。例如:

>>> 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>]>

标签: djangodjango-orm

解决方案


您可以尝试使用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)

推荐阅读