Эквивалент Django для FIND_IN_SET () в MySQL - PullRequest
2 голосов
/ 29 ноября 2011

В устаревшей базе данных MySQL у меня есть таблица с полем, представляющим собой список значений, разделенных запятыми:

id  | field
---------------
1   | 2,4,8
2   | 1,4,15,24

Что такое эквивалент Django для следующего запроса?

SELECT * FROM `table_name` WHERE FIND_IN_SET(15, field)

Предположим, Джанго видит это поле как обычное CharField.

Ответы [ 3 ]

6 голосов
/ 29 ноября 2011

Для вещей, которые это обычай, я думаю, вы можете застрять с extra ()

Пример:

# Warning, MySQL specific query ahead!
Model.objects.extra(where=['FIND_IN_SET(15, field)'])
3 голосов
/ 29 ноября 2011

Нет ни одного. И не должно быть ни одного. Это особенно нестандартная функция MySQL, и Django не занимается поведением, связанным с БД. Используйте пользовательский SQL.

0 голосов
/ 27 июня 2019

Используйте метод extra () в качестве последнего средства.Согласно документации Django, метод extra () может быть объявлен устаревшим в любой момент.

Лучше использовать регулярное выражение в Django.

Пример:

  • Model.objects.filter (field__iregex = r '(24),?')

Приведенный выше QuerySet проверит наличие цифры '24' в столбце поля и также совпадет, если запятаясопровождается цифрой (24,25) или, если только цифрой (12,24).

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