如何使用django过滤器icontains获得多个字段

yan*_*v14 6 python django search

我试图将我的查询搜索与我的所有模型字段进行比较,但我无法确定如何在多个字段中执行此操作.

这是我的代码.

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

q = request.GET['q']
result = expense.filter(name__icontains=q)
Run Code Online (Sandbox Code Playgroud)

我要检查在:name,amount,category

提前致谢

jur*_*eza 12

来自Django文档:

"关键字参数查询 - 在filter()等中 - 被"一起"编辑.如果你需要执行更复杂的查询(例如,带有OR语句的查询),你可以使用Q对象."

from django.db.models import Q
expense.objects.filter(
    Q(name__icontains=q) | Q(amount__icontains=q) | Q(category__icontains=q)
)
Run Code Online (Sandbox Code Playgroud)

我不确定您的模型中的数量和类别的类型,因此icontains可能不适用于它们.

看到这个链接.

  • 你应该使用filter而不是get,因为get只返回一个对象。 (2认同)
  • 如果它是外键,您可以访问带有双下划线的名称字段:例如 category__name__icontains。 (2认同)