Q查询和F查询
F查询
可以比较同一个model实例中两个不同字段的值,以及对字段进行简单的运算再比较和对数据的修改
from django.db.models import F 例: #查询一篇文章的评论数量大于收藏数量 article.objects.filter(commet_num__gt=F('collect_num')) #查询文章评论数大于收藏数量2倍的文章 article.objects.filter(comment_num__gt=F('collect_num')*2) #将每篇文章的售价提高10块钱 article.objects.update(price=F('price')+10)
Q查询
可以使用or,那就要用到Q查询,&和|可组合使用
from django.db.models import Q 例: #查询a作者或b作者写的文章 article.objects.filter(Q(author_name='a')|Q(author_name='b')) #Q对象可以使用~ 操作符取反,查询不是a作者和b作者写的文章 article.objects.filter(~Q(author_name='a') & ~Q(author_name='b')) # ~Q操作,查询文章名不是python并且评论数大于100的 article.objects.filter(~Q(article_name='python') & comment__gt=100) #Q对象还可以和关键字参数混合使用,但是Q对象必须位于关键字参数前面 article.objects.filter(Q(writeDate__year=2018) | (Q(writeDate__year=2019),title_icontains='python')) # Q套Q的使用,查询文章名为Python的,并且评论数大于100或者收藏数大于100的 article.objects.filter(Q(name='python') &Q(comment_num__gt=100)|Q(collect_num__gt=100))