如何链接Django的“in”和“iexact”查询集字段查找?

时间:2013-02-16 06:07:13

标签: django django-orm

我有一个名单,例如:

name_list = ['Alpha', 'bEtA', 'omegA']

目前我有以下查询集:

MyModel.objects.filter(name__in=name_list)

我希望能够以不区分大小写的方式过滤名称。我的第一个想法是使用iexact字段查找,但它似乎不适用于in。如何将iexact in字段查找用于我的查询集?或者是否有另一种方法来执行此查询?

3 个答案:

答案 0 :(得分:24)

这是我的解决方案,它使用Q objects代替:

name_list = ['Alpha', 'bEtA', 'omegA']
q_list = map(lambda n: Q(name__iexact=n), name_list)
q_list = reduce(lambda a, b: a | b, q_list)
MyModel.objects.filter(q_list)

答案 1 :(得分:3)

name_list = ['Alpha', 'bEtA', 'omegA']
results = MyModel.objects.none()
for name in name_list:
    results |= MyModel.objects.filter(name__iexact=name)

好的我测试它并且它有效:)

答案 2 :(得分:0)

这是一个使用列表理解的示例。它与catherine的answer类似,但是具有一个数据库命中率,例如Derek Kwok的answer(但在过程上而非功能上)。

q_list = Q()
for q in [Q(name__iexact=n) for n in name_list]:
    q_list |= q
MyModel.objects.filter(q_list)

对于那些希望避免使用python压缩,映射,缩小等内容的人。