【问题标题】:Specifying Django Related Model Sort Order指定 Django 相关模型排序顺序
【发布时间】:2010-11-01 08:28:11
【问题描述】:

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

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

【问题讨论】:

    标签: django django-models django-views django-queryset


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。是否有一种简单的方法可以对每个列表进行不同的处理,还是我必须将它们分开并逐个处理?
    • 但是如果 List 与 Listtem 是多对多关系呢?
    【解决方案2】:

    如果列表很小,那么您可以do it in python,使用排序和标记

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2015-02-18
      • 1970-01-01
      • 2015-08-31
      相关资源
      最近更新 更多