首页 > 解决方案 > 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')

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

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

标签: pythondjangodjango-queryset

解决方案


这应该这样做:

latest = Budget.objects.filter(group=OuterRef('pk')).order_by('-pk')

Group.objects.annotate(
    latest_budget=Subquery(
        latest.values('amount')[:1]
    )
).order_by('latest_budget')

推荐阅读