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

2024-05-12 22:28:05 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试图根据查询集的{}(如最近分配的){}数量对{}查询集进行排序

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

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

有了ForeignKey关系,我希望我能做一些类似的事情

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

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

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


Tags: namebymodelobjects排序modelsgrouporder
2条回答

您可以尝试将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')

相关问题 更多 >