Django 按反向关系的注释字段对查询集进行排序
我有两个模型,表单和行,每行有一个FK到表单。 我想在最后一行添加时对表格进行排序Django 按反向关系的注释字段对查询集进行排序,django,django-queryset,django-orm,Django,Django Queryset,Django Orm,我有两个模型,表单和行,每行有一个FK到表单。 我想在最后一行添加时对表格进行排序 class Form(models.Model): ... class Row(models.Model): form = models.ForeignKey( Form, related_name="rows", ) created_at = models.DateTimeField( auto_now_add=True,
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')
注释之后,需要调用方法
sorted_qs=Form.objects.filter(is_empty=False
).annotate(last_submit=Max(“创建的行”)
).订购人('-last\u submit')
更新:
在查询集的开头看不到新创建的
表单
实例的一个可能原因是,某些行
对象可能没有在处创建的值,因此它成为第一个。在这种情况下,您可以通过设置nulls\u last=True
来按行为更改顺序。有关更多详细信息,请参阅这篇SO帖子,我现在要补充,我忘了提及它。我正在使用这个,但它似乎不起作用。顺序会改变,但当我添加新行时,它不会出现在查询的前面。“我添加新行,它不会出现在查询的前面…”您添加了哪个实例<代码>表单
或行
?例如,如果我用created_at=now()添加一行,我希望相应的表单成为排序后的第一个表单,但这并没有发生。因此我发现我的代码工作正常,只是有些表单没有提交,django认为没有任何表单大于任何日期:)在这种情况下,使用这种订购技巧,
sorted_qs = Form.objects.filter(is_empty=False
).annotate(last_submit=Max("rows__created_at")
).order_by('-last_submit')