Я пытаюсь использовать Django StrIndex, чтобы найти все строки со значением, являющимся подстрокой данной строки.
Например: моя таблица содержит:
+----------+------------------+
| user | domain |
+----------+------------------+
| spam1 | spam.com |
| badguy+ | |
| | protonmail.com |
| spammer | |
| | spamdomain.co.uk |
+----------+------------------+
, но запрос
SpamWord.objects.annotate(idx=StrIndex(models.Value('xxxx'), 'user')).filter(models.Q(idx__gt=0) | models.Q(domain='spamdomain.co.uk')).first()
соответствует <SpamWord: *@protonmail.com>
Это запрос SELECT `spamwords`.`id`, `spamwords`.`user`, `spamwords`.`domain`, INSTR('xxxx', `spamwords`.`user`) AS `idx` FROM `spamwords` WHERE (INSTR('xxxx', `spamwords`.`user`) > 0 OR `spamwords`.`domain` = 'spamdomain.co.uk')
Это должно быть <SpamWord: *@spamdomain.co.uk>
это происходит, потому что INSTR('xxxx', '')
=> 1 (а также INSTR('xxxxasd', 'xxxx')
=> 1, что правильно)
Как мне написать этот запрос, чтобы получить запись №5 (spamdomain.co.uk)?