Как фильтровать поле Multiselect в django (разделять запятыми)
моя модель
class Dictionary():
ALLERGIES = (
(0, 'none'),
(1, 'a'),
(2, 'b'),
(3, 'c'),
(4, 'd'),
(5, 'e'),
(6, 'f'),
(7, 'g'),
(8, 'h'),
(9, 'i'),
(10, 'x'),
(11, 'y'),
(12, 'z'),
)
...
allergies = MultiSelectField(default=0, null=True, blank=True, choices=ALLERGIES, max_choices=12)
Моя первая попытка.
dictionaries.filter(
Q(allergies__isnull=False) & Q(allergies__icontains=pet_allergy))
пример словарей данных
id | allergies |
---|---|
1 | "1,2,3,4" |
2 | "1,2,10" |
3 | "4,5,6,7,10" |
4 | "6,8,12 |
5 | null |
pet_allergy = 1
Я ожидал, что будут возвращены идентификаторы 1 и 2.
Однако, id 1, 2, 3 и 4 вернулись вопреки моим ожиданиям.
Потому что sql был вызван как %1%.
Моя вторая попытка
class Dictionary():
...
def get_allergies(self):
if self.allergies:
return str(self.allergies).split(',')
else:
return None
dictionaries.filter(
Q(allergies__isnull=False) & Q(get_allergies__in=pet_allergy_id)
)
>> Cannot resolve keyword 'get_allergies' into field.
Есть ли какой-нибудь хороший способ решить эту проблему?
P.S. Моя БД - mariadb. / django = v3.1