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

В документации по Django QuerySet API объясняется, как фильтровать результаты с помощью поиска в полях. У меня проблема в том, что этот подход требует, чтобы левый операнд был полем, а мне нужно, чтобы он был выражением, чтобы получить эквивалент (' ' || tagnames || ' ') LIKE '% xyz %'.

Какой лучший способ сделать это? Чтобы уточнить, что я имею в виду под «лучшим»: я надеюсь на что-то, что не будет зависеть от используемой базы данных.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2011

Один из способов сделать это - это следующий (не уверен, что это обязательно лучший способ):

from django.db.models import Q

...filter(Q(tag_name__startswith=tag_value+' ') | Q(tag_name__contains=' '+tag_value+' ') | Q(tag_name__endswith=' '+tag_value))

Кроме того, вы всегда можете просто использовать фактический SQL, который вы 'Вы хотите использовать метод raw.

SomeModel.objects.raw('SELECT * FROM my_table')
0 голосов
/ 17 ноября 2011

Для вашего запроса ('' || tagnames || '') LIKE '% xyz%' достаточно:

...filter( tag_name__contais = tag_value) 

потому что заготовки могут быть упрощены.

опс! Вы изменили вопрос!

для вашего нового запроса ('' || тэги || '') LIKE '% xyz%':

tag_list = tag_value.split(" ")

...filter( tag_name__in = tag_value) 
0 голосов
/ 17 ноября 2011

не уверен, что я следую.Вы имеете в виду, что имя поля, по которому вы фильтруете, определяется выражением?в этом случае

...filter(**{tag_name: tag_value})

может быть то, что вы ищете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...