使用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'))
这是什么想法?
- 我们得到所有作者的计数。
- 做过滤器
- 仅返回具有筛选作者计数的行 == 所有作者计数