python - Django:按反向 ForeignKey 关系中的最后一项排序
问题描述
我正在尝试实施一项qs.sort_by
操作,但我不确定如何去做。
给定以下模型
class Group(models.Model):
name = models.CharField(max_length=300)
( ... )
class Budget(models.Model):
( ... )
amount = models.DecimalField(
decimal_places=2,
max_digits=8,
)
group = models.ForeignKey(
Group,
related_name="budgets",
on_delete=models.CASCADE,
)
每个人Group
都分配了预算0
> 5
我正在尝试Group.objects.all()
按查询集的数量last
(如,最近分配的)对查询集进行排序Budget
。
我知道,如果是这样,OneToOne
我可以执行以下操作:
Group.objects.all().order_by('budget__amount')
有了ForeignKey
关系,我希望我能做类似的事情
Group.objects.all().order_by('budgets__last__amount')
但是,唉,这不是一个有效的操作,但我不确定如何进行其他操作。
有谁知道如何执行此排序操作?(如果确实可能的话)
解决方案
这应该这样做:
latest = Budget.objects.filter(group=OuterRef('pk')).order_by('-pk')
Group.objects.annotate(
latest_budget=Subquery(
latest.values('amount')[:1]
)
).order_by('latest_budget')
推荐阅读
- google-chrome - 如何防止 chrome devtools 停止在 `debugger` 关键字上?
- javascript - 从跨度元素计算总计
- javascript - React Context 不会更新所有的孩子
- reactjs - 请求被 CORS 阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态
- php - laravel 5.8 在 getenv 上返回 false
- swift - 如何从另一个控制器中关闭 WKInterfaceController?
- java - 扫描仪和用户的输入
- android - React 本机应用程序构建失败。尝试制作二维码阅读应用
- sql - sql查询过滤在另一个表中使用的行
- c - 斐波那契数列有一些运行时错误