按反向关系的注释字段对查询集进行排序
Sorting querysets by annotated field of reverse relation
我有 2 个模型,Form 和 Row,每个 Row 都有一个 FK 到一个 Form。
我想按添加最后一行的时间对我的表单进行排序。
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')
注解后需要调用order_by()
方法
sorted_qs = Form.objects.filter(is_empty=False
).annotate(last_submit=Max("rows__created_at")
)<b>.order_by('-last_submit')</b>
更新:
在查询集的开头看不到新创建的 Form
实例的一个可能原因是,某些 Row
对象可能没有 created_at
值,所以它成为第一个。在这种情况下,您可以通过设置 nulls_last=True
来更改 order by 行为。有关详细信息,请参阅此 SO post、Django: Adding “NULLS LAST” to query
我有 2 个模型,Form 和 Row,每个 Row 都有一个 FK 到一个 Form。 我想按添加最后一行的时间对我的表单进行排序。
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')
注解后需要调用order_by()
方法
sorted_qs = Form.objects.filter(is_empty=False
).annotate(last_submit=Max("rows__created_at")
)<b>.order_by('-last_submit')</b>
更新:
在查询集的开头看不到新创建的 Form
实例的一个可能原因是,某些 Row
对象可能没有 created_at
值,所以它成为第一个。在这种情况下,您可以通过设置 nulls_last=True
来更改 order by 行为。有关详细信息,请参阅此 SO post、Django: Adding “NULLS LAST” to query