如何使用django filter icontains获取多个字段

9 投票
1 回答
10096 浏览
提问于 2025-04-17 16:53

我想把我的查询搜索和我模型里的所有字段进行比较,但我不知道怎么在多个字段上进行比较。

这是我的代码。

expense = Expense.objects.filter(user=request.user.id).order_by('date')

q = request.GET['q']
result = expense.filter(name__icontains=q)

我想检查的字段有:name(名字)、amount(数量)、category(类别)

提前谢谢你们!

1 个回答

21

来自Django文档:

“在filter()等函数中,关键字参数查询是通过“与”(AND)连接在一起的。如果你需要执行更复杂的查询(比如包含“或”(OR)语句的查询),你可以使用Q对象。”

from django.db.models import Q
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q)
)

我不太确定你模型中的amount和category的类型,所以icontains可能对它们不起作用。

可以查看这个链接

撰写回答