Django ORM Поиск нескольких условных запросов - PullRequest
0 голосов
/ 03 июля 2019

У меня проблема с поиском в моем наборе запросов с несколькими условными выражениями. В моей базе данных hscode сохранен как "0105.14.90". Мне нужно найти hscodes с этим запросом "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 ? 1013 *

>>> query = '01051490'
>>> HSCode.objects.filter(Q(hscode=query) | Q(???))
<QuerySet [<HSCode: 0105.14.90>]>

1 Ответ

1 голос
/ 03 июля 2019

Вы можете попробовать с 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)
...