一般在django中查询数据库都是用queryset方法,当查询条件比较多的时候,Q对象的作用就显现了,他能让代码 更可读逻辑更清晰。
深度先不研究,主要看看如何用的。
category_articles = Article.objects.filter(
Q(category_id=category.id) & Q(published=1)).order_by('-pub_date')
# 原来的语法
category_articles = Article.objects.filter(category_id=category.id, published=1).order_by('-pub_date')
上述例子看起来好像差不多,但是当查询条件再多再复杂下面的例子将变得不可读。而且Q对象支持反(~),并(&),或(|)这样再复杂的查询语句也能够很好的支持(通过重写Q对象的__or__, __invert__, __and__方法实现)