Фильтр полей массива Django
В моем случае поданные клиентом являются массивом поданных
customer = ArrayField(models.TextField(),default=[])
моя модель выглядит как
| id | customer |
|---|---|
| 1 | {1,2,3} |
| 2 | {4,2,5} |
| 3 | {1,8,9} |
я хочу отфильтровать мою модель по {5,8}
на выходе будет 2th ,3th ряд
Вы можете использовать overlap следующим образом:
customer_ids = MyModel.objects.filter(
customer__overlap=[5, 8]
).values_list('id', flat=True)
# do something with customer_ids
Но использование id для определения номера строки неправильно, потому что если вы удалите элемент с id 3, а затем после этого вставите новый элемент, то этому новому элементу будет присвоен id 4. Таким образом, номер последней строки даст вам 4-ю строку, что неправильно.
Вы можете получить номер строки следующим образом:
row_numbers = [index for index, customer_id in enumerate(customer_ids)]