如何使用django filter icontains获取多个字段
我想把我的查询搜索和我模型里的所有字段进行比较,但我不知道怎么在多个字段上进行比较。
这是我的代码。
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可能对它们不起作用。
可以查看这个链接。