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

如何按父模型属性对Django的Profile查询集进行排序?

解决Profile查询集按关联User模型字段排序的问题

这问题我之前也碰到过,其实核心原因很简单:date_joined是Django内置User模型的字段,你的Profile模型本身并没有这个字段,直接在Profile的查询集里用它自然会报错。要实现按关联User的字段排序,你需要用**双下划线__**来跨模型访问关联字段。

正确的查询代码

把你的排序语句改成这样:

queryset = Profile.objects.all().order_by('-user__date_joined')

这里的user__date_joined表示:通过Profile模型的user外键字段,访问关联User模型的date_joined字段。前面的-表示按倒序排列(最新加入的在前),如果要正序去掉-即可。

扩展说明

这种双下划线的用法在Django ORM里非常常用,除了排序,你还可以用它来做过滤、筛选等操作,比如:

  • 筛选出用户注册时间在某个日期之后的Profile:
    from django.utils import timezone
    one_month_ago = timezone.now() - timezone.timedelta(days=30)
    queryset = Profile.objects.filter(user__date_joined__gte=one_month_ago)
    
  • 按User的用户名排序:
    queryset = Profile.objects.all().order_by('user__username')
    

小提示

另外注意到你的Profile模型的__str__方法里写了return self.get_username(),这会报错哦,因为Profile类没有这个方法,应该改成return self.user.username来获取关联用户的用户名。

内容的提问来源于stack exchange,提问作者sadmansh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:23:15