2013-02-23 78 views
5

我想比较我的查询搜索到我所有的模型领域,但我不知道如何在多个领域做到这一点。如何获得与Django过滤器icontains多个字段

这是我的代码。

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

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

我要签:nameamountcategory

在此先感谢

+0

如果amount是一个整数,您可能不会想要使用icontains,而是使用常规查找。 – Udi 2013-02-23 20:24:34

回答

11

从Django文档:

“关键字参数查询 - 过滤器(),等 - 如果你需要执行更复杂的查询(例如使用OR语句的查询),你可以使用Q对象。“

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

我不确定您的模型中的金额和类别的类型,所以icontains可能不适用于它们。

参见this link

+1

你应该使用过滤器而不是get,因为只返回一个对象。 – UnLiMiTeD 2013-02-23 20:27:06

+0

@UnLiMiTeD感谢您的纠正。 – jurgenreza 2013-02-23 20:28:45

+0

完美,非常感谢你 – yaniv14 2013-02-23 20:38:47

0

这个作品完美像Jurgenreza回答。

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