Django:按反向外键关系中的最后一项排序

Django: Ordering by last item in reverse ForeignKey relation

我正在尝试实施 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 预算

我正在尝试根据 last(如最近分配的)Budget.

的数量对 Group.objects.all() 查询集进行排序

我知道如果它是 OneToOne 我可以做如下的事情:

Group.objects.all().order_by('budget__amount')

ForeignKey 关系我希望我可以做一些像

Group.objects.all().order_by('budgets__last__amount')

可惜,这不是一个有效的操作,但我不确定如何进行其他操作。

有谁知道如何执行这个排序操作? (如果确实可以的话)

您可以尝试使用 sorted 和自定义密钥:

sorted(Group.objects.all(), key=lambda x: x.last__budget__amount)

也许 .last__budget__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')