如何根据包含字段和值的列表过滤模型?

3 投票
2 回答
1062 浏览
提问于 2025-04-17 00:22

看看我有什么:

> bar = [(u'code__regex', u'^[^J]'), (u'active__exact', u'0'), (u'type__id__exact', u'E01')]

这些是我想用来过滤模型Foo的字段/值。

> #want to have this equivalent:
> Foo.objects.filter(bar)

谢谢!

2 个回答

3

你没有说明你想要用“与”(AND)还是“或”(OR)。如果你想用“与”,那么你可以简单地把那个列表转换成一个字典,然后传给过滤器:

Foo.objects.filter(**dict(bar))
8
Foo.objects.filter(**dict(bar))

这不是Django的问题,而是Python的问题。你想把关键字对作为关键字参数(kwargs)传递给过滤器。你的bar作为一个关键字参数的集合是完美的,所以dict(bar)把它转换成字典,而**前缀告诉Python解析器,这个字典要被接收方当作关键字参数来理解。

Stack Overflow上的一篇文章 理解Python中的kwargs对此进行了更详细的讲解。

撰写回答