如何在列表查询中做一个 Django 列表

问题描述 投票:0回答:3

我有一个列表过滤项目列表,如下所示:

[['3aa', '1ss', '2bb'], ['4aa', '5bb'], ['3nn', '9mm', '6cc']]

我的数据库表有一个字段,其中一个字段(类别)保存一个列表作为值:

['4aa', '5bb']
我如何查询以获取其类别在过滤器列表中的项目?

类似的东西:

Table.objects.filter(category__in=[['3aa', '1ss', '2bb'], ['4aa', '5bb'], ['3nn', '9mm', '6cc']])

Model:
Class Table(…):
   category = models.jsonfield()
python django list django-models django-queryset
3个回答
0
投票

我可能会把列表的列表压平成一个列表。

# flatten list of lists
ls = [['3aa', '1ss', '2bb'], ['4aa', '5bb'], ['3nn', '9mm', '6cc']]
 
# iterate through list of lists in a nested loop
flat_ls = []
for i in ls:
    for j in i:
        flat_ls.append(j)

Table.objects.filter(category__in=flat_ls)

0
投票

首先,您应该将过滤器列表展平为一个列表,以便您可以将其传递给

__in
查找,如下所示:

filter_list = [['3aa', '1ss', '2bb'], ['4aa', '5bb'], ['3nn', '9mm', '6cc']]
flat_filtered_list = [item for sublist in filter_list for item in sublist]

result = Table.objects.filter(category__in=flat_filtered_list)


0
投票

精确查找有效吗? (

Table.objects.filter(category=['3aa', '1ss', '2bb'])
)
如果是这样,您可以使用 Q 对象

q_conditions = Q()
for categories in categories_list:
    q_conditions |= Q(category=categories)

Table.objects.filter(q_conditions)
© www.soinside.com 2019 - 2024. All rights reserved.