Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 按反向关系的注释字段对查询集进行排序_Django_Django Queryset_Django Orm - Fatal编程技术网

Django 按反向关系的注释字段对查询集进行排序

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,

我有两个模型,表单和行,每行有一个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')

注释之后,需要调用方法

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')