按反向关系的注释字段排序查询集

问题描述 投票:0回答:1

我有两个模型,分别是Form和Row,每行都有一个FK。我想按上一行添加的时间对表单进行排序。

class Form(models.Model):
    ...

class Row(models.Model):
    form = models.ForeignKey(
        Form,
        related_name="rows",
    )
    created_at = models.DateTimeField(
        auto_now_add=True,
    )

我尝试了这个,但是没有用:

queryset = Form.objects.filter(is_empty=False)
queryset = queryset.annotate(last_submit=Max("rows__created_at")).order_by('-last_submit')
django django-queryset django-orm
1个回答
1
投票

注解后,您需要调用order_by()方法。

order_by()

更新:

[在查询集的开头看不到新创建的sorted_qs = Form.objects.filter(is_empty=False ).annotate(last_submit=Max("rows__created_at") ).order_by('-last_submit')实例的一个可能的原因是,某些Form对象可能没有Row值,因此成为第一个。在这种情况下,可以通过设置[created_at来更改order by行为。有关更多详细信息,请参阅此SO帖子,nulls_last=True

© www.soinside.com 2019 - 2024. All rights reserved.