<div id="cnblogs_post_body" class="blogpost-body">
问题
一般我们在Django程序中查询数据库操作都是在QuerySet里进行进行,例如下面代码:
>> q1 = Entry.objects.filter(headline__startswith=>> q2 = q1.exclude(pub_date__gte=datetime.date.today())
>> q3 = q1.filter(pub_date__gte=datetime.date.today())
或者将其组合起来,例如:
>>q1 = Entry.objects.filter(headline_startswith="What").exclude(pub_date_gte=datetime.date.today())
随着我们的程序越来越复杂,查询的条件也跟着复杂起来,这样简单的通过一个filter()来进行查询的条件将导致我们的查询越来越长。
Q()对象就是为了将这些条件组合起来。
当我们在查询的条件中需要组合条件时(例如两个条件“且”或者“或”)时。我们可以使用Q()查询对象。例如下面的代码
这样就生成了一个Q()对象,我们可以函数。自动生成一个新的Q()。例如下面代码就将两个条件组合成了一个
我们可以在,例如下面代码:
对应sql语句可以理解为:
这样我们查询逻辑。
自动理解成“且(and)”关系。如上面代码使用sql语句理解将会是:
sql">