📜  django queryset 多个过滤器 - Python (1)

📅  最后修改于: 2023-12-03 15:30:28.932000             🧑  作者: Mango

Django QuerySet: 多个过滤器

在Django中,QuerySet是与数据库交互的主要工具之一。你可以使用QuerySet执行许多操作,包括过滤、排除和排序。

本文将介绍如何使用多个过滤器来精确查询你需要的数据。

一、使用单个过滤器

使用单个过滤器非常简单。例如,如果你想过滤所有年龄大于18岁的用户,可以使用以下代码:

from myapp.models import User

users = User.objects.filter(age__gt=18)

这将返回包含所有年龄大于18岁的用户的QuerySet对象。

二、使用多个过滤器

使用多个过滤器允许你更精确地查询数据。例如,如果你还想过滤在纽约州注册的用户,可以在上面的代码中添加一个额外的过滤器:

from myapp.models import User

users = User.objects.filter(age__gt=18, state="NY")

这将返回包含所有年龄大于18岁且所在州为"NY"的用户的QuerySet对象。

你还可以使用多个过滤器来实现更复杂的查询。例如,你可以过滤出最近一个月内登录了但年龄小于25岁的用户:

from myapp.models import User
import datetime

one_month_ago = datetime.datetime.now() - datetime.timedelta(days=30)
users = User.objects.filter(last_login__gte=one_month_ago, age__lt=25)
三、逻辑运算符

多个过滤器之间的关系可以是And(与)或Or(或)。

And

默认情况下,多个过滤器之间的关系是And。例如,以下代码将返回一个QuerySet对象,其中age>18并且state="NY":

from myapp.models import User

users = User.objects.filter(age__gt=18, state="NY")
Or

要使用或运算符,可以使用Q对象。例如,以下代码将返回一个QuerySet对象,其中age>18或state="NY":

from myapp.models import User
from django.db.models import Q

users = User.objects.filter(Q(age__gt=18) | Q(state="NY"))

Q对象将条件合并为一个查询,以便将多个查询合并为Or查询。可以使用与运算符&和Invert运算符~来更精确地构造Q对象查询。

四、总结

使用多个过滤器可以帮助你更细致地查询你需要的数据。可以使用 And 和 Or 来合理地组合条件,Q对象允许你更精确地构造查询。

以上是Django QuerySet多个过滤器的介绍。希望对你有所帮助!