Django ManytoMany 停用所有满足条件的对象



使用Django模型的例子来查询(https://docs.djangoproject.com/en/1.8/topics/db/queries/):

如何使用过滤器功能选择所有作者姓名都以 R 开头的条目?

您可以使用双下划线语法,如该页后面所述。

Entry.objects.filter(authors__name__startswith='R')

编辑

所以你真正想做的是排除所有那些不以R开头的作者。您可以使用 Q 对象和~运算符来执行此操作:

from django.db.models import Q
Entry.objects.exclude(~Q(authors__name__startswith='R'))

我可以为这样的任务想到一个棘手的解决方案。(未测试)

Entry.objects 
.annotate(num_authors=Count('authors')) 
.filter(authors__name__startswith='R')
.annotate(num_authors_with_r=Count('authors')) 
.filter(num_authors=F('num_authors_with_r'))

这是什么想法?

  1. 我们得到所有作者的计数。
  2. 做过滤器
  3. 仅返回具有筛选作者计数的行 == 所有作者计数

相关内容

  • 没有找到相关文章

最新更新