代码之家  ›  专栏  ›  技术社区  ›  Jason Champion

指定与Django相关的模型排序顺序

  •  2
  • Jason Champion  · 技术社区  · 15 年前

    我有Django模型,它们是项目列表,我希望每个列表上的项目都有一个单独的排序顺序。也许列表1将按名称对行项目排序,列表2按日期排序,列表3按优先级排序。

    这些模型或多或少像这样:

    class ListItem(models.Model):
        priority = models.IntegerField(choices=PRIORITY_CHOICES)
        name = models.CharField(max_length=240)
        due_date = models.DateTimeField(null=True, blank=True)
        list = models.ForeignKey(List)
    

    现在,我正在视图中使用此查询:

    lists = List.objects.filter(user=request.user)
    return render_to_response('showlists.html', {'lists': lists })
    

    我读过一些例子,暗示我可以这样做:

    lists = List.objects.filter(user=request.user).select_related().order_by("items.name")
    

    假设这是可行的,它将为每批项目提供具有相同排序顺序的列表集合。如何对每个单独列表的相关项进行不同的排序?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Daniel Roseman    15 年前

    在相关模型之间排序的语法与 filter ,这样您就可以:

    List.objects.filter(user=request.user).select_related().order_by("listitems__name")
    

    您应该能够以相同的方式在 order_by 打电话。

        2
  •  2
  •   Tom Leys    15 年前

    如果清单很小,你可以 do it in python ,使用排序和标记

    list = <...code to get sublist here ...>
    list.sort(key=lambda x: x.due_date) #sort by due date, say
    

    否则,为每个子列表启动一个查询