Django Обратное регулярное выражение - PullRequest
2 голосов
/ 22 марта 2020

У меня есть таблица (Django Модель), и каждая строка / объект содержит регулярное выражение, которое я должен оценивать по заданному входу для фильтрации соответствующих объектов.

Есть ли какой-либо Django метод ORM для сделать это?

В Postgre это будет:

SELECT * FROM 'value' ~ column;

и напротив того, что я ищу, это:

Model.objects.filter(column__regex='regex')

Я знаю, что оценка регулярных выражений на стороне приложения даст такую ​​же производительность, что и запрос, но мой дизайн приложения требует, чтобы я переместил этот фильтр на сторону базы данных (как правильный запрос на основе ORM).

Любые идеи, как я могу добиться этого, используя Django?

Спасибо!

С уважением,

1 Ответ

3 голосов
/ 22 марта 2020

Мы можем использовать .annotate(..), чтобы «ввести» значение, а затем использовать выражение F для ссылки на столбец:

from django.db.models import CharField, Value, F

Model.objects.annotate(
    <b>value=Value('value', output_field=CharField())</b>
).filter(
    <b>value__regex=F('regex')</b>
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...