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))
原文地址:https://www.cnblogs.com/tuzaizi/p/13063974.html