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')
我正在尝试实施 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')