2

我有作为项目列表的 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")

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

4

2 回答 2

3

跨相关模型排序的语法与 for 的双下划线格式相同filter,因此您可以这样做:

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

order_by您应该能够在调用中以相同的方式使用不同的字段。

于 2009-06-09T09:26:45.590 回答
2

如果列表很小,那么您可以在 python中使用排序和标记来完成

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

否则启动每个子列表的查询

于 2009-06-09T02:11:21.070 回答