You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 07:55:22