Django: преобразовать строку в массив - PullRequest
0 голосов
/ 22 марта 2019

У меня есть строка переменная

auxi_espec = '1, 3, 5, 7,'

И мне нужно преобразовать его в массив, чтобы создать набор запросов, где я фильтрую, используя __in.(Возможно, я думаю, что мне также нужно нарезать последнюю запятую).

Ответы [ 3 ]

1 голос
/ 22 марта 2019

Вам необходимо использовать split() функцию:

>>> auxi_espec = '1, 3, 5, 7,'
>>> auxi_espec_lst = [x.strip() for x in auxi_espec.split(',')][:-1]
>>> auxi_espec_lst
['1', '3', '5', '7']

Если вы хотите разобрать эти числа в целое число:

>>> auxi_espec = '1, 3, 5, 7,'
>>> auxi_espec_lst = [int(x.strip()) for x in auxi_espec.split(',') if x]
>>> auxi_espec_lst
[1, 3, 5, 7]
0 голосов
/ 22 марта 2019

Используйте регулярные выражения, они потрясающие:

>>> import re
>>> auxi_espec = '1, 3, 5, 7,'
>>> indices = re.findall(r'(\d+)', auxi_espec)
>>> indices
['1', '3', '5', '7']
>>> [int(i) for i in indices]
[1, 3, 5, 7]
0 голосов
/ 22 марта 2019

Django принимает много итераций для in поиска, поэтому, если формат строки, которую вы упомянули, установлен в камне, этого разделения достаточно, как и список строк.

ids = auxi_espec[0:-1].split(', ')  # ['1', '3', '5', '7']
instances = MyModel.objects.filter(id__in=ids)
...