如何在Django ORM中对order by与distinct结果进行二次过滤?
解决方法
直接链式过滤(简单场景首选)
在原查询结果后追加exclude()方法,精准排除目标记录:EmailModel.objects.all().order_by('date').distinct('Name').exclude(Name='Dane', email='dane_1@yahoo.com')子查询动态过滤(复杂场景适用)
先通过子查询获取每个Name对应的首条记录邮箱,再进行条件过滤,适合需要动态判断的场景:from django.db.models import Subquery, OuterRef # 子查询获取每个Name的首条记录邮箱 first_email_subquery = EmailModel.objects.filter(Name=OuterRef('Name')).order_by('date').values('email')[:1] # 筛选并排除符合排除条件的记录 result = EmailModel.objects.annotate(first_email=Subquery(first_email_subquery))\ .order_by('date')\ .distinct('Name')\ .exclude(Name='Dane', first_email='dane_1@yahoo.com')
内容的提问来源于stack exchange,提问作者raj-kapil
相关产品推荐
相关产品推荐

