我有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")
假设有效,它会为我提供每批项目具有相同排序顺序的列表集合。我将如何以不同方式对每个列表的相关项目进行排序?
答案 0 :(得分:3)
跨相关模型排序的语法与filter
的双下划线格式相同,因此您可以这样做:
List.objects.filter(user=request.user).select_related().order_by("listitems__name")
您应该能够在order_by
调用中以相同的方式使用不同的字段。
答案 1 :(得分:2)
如果列表很小,那么您可以do it in python使用排序和标记
list = <...code to get sublist here ...>
list.sort(key=lambda x: x.due_date) #sort by due date, say
否则启动每个子列表的查询