Как мне написать мой запрос Django, когда в предложении WHERE должна быть функция? - PullRequest
0 голосов
/ 17 марта 2019

Я использую Django и Python 3.7 вместе с PostGres 9.5.В моей таблице PostGres есть текстовый столбец, в котором записаны URL-адреса статей.Я хочу выполнить запрос, который сравнивает все перед строкой запроса, например,

SELECT * FROM article where regexp_replace(url, '\?.*$', '') = :url_wo_query_info

, но я не уверен, как осуществить это в Django.Обычно, если я хочу выполнить запрос только по URL-адресу, я мог бы написать

Article.objects.filter(url=url)

BUt. Я не уверен, как это сделать в жаргоне Django, потому что здесь задействована более сложная функция.

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете использовать Func с выражениями F для использования функций базы данных на полях модели.Ваш запрос будет выглядеть так в Django ORM:

Article.objects.all().annotate(
    processed_url=Func(
        F('url'),
        Value('\?.*$'), Value(''),
        function='regexp_replace',
    )
).filter(processed_url=url_wo_query_info)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...