pen*_*ent 3 python django serialization grouping django-rest-framework
在我正在处理的当前项目中,我需要按类别重新组合(分组)一个查询集,并将具有相同类别的内容放在一起提供的列表中。我有以下模型结构:
class Category(models.Model):
title = models.CharField(max_length=255)
class Item(models.Model):
title = models.CharField(max_length=255)
category = models.ForeignKey(to="Category", verbose_name=_('category'), related_name='items',
on_delete=models.SET_NULL, null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)
我希望输出序列化结果如下:
{
"category_title_1":[
{
"id": 1,
"title" : "something",
},
{
"id": 2,
"title": "something else",
}
],
"category_title_2": [
{
"id": 3,
"title": "another string",
},
{
"id": 4,
"title": "and yet another title",
}
]
}
Run Code Online (Sandbox Code Playgroud)
我知道我总是可以遍历查询集并手动对它们进行分组,我想知道是否有一种本地有效的方法来做到这一点。
谢谢
我不相信使用 ORM 本身是可能的,尽管正如 Guybrush 提到的,itertools.groupby可以用来实现这一点 - 并且以一种相当优雅的方式。
from itertools import groupby
from operator import itemgetter
from rest_framework.response import Response
items = Item.objects.values('category__title', 'id', 'title').order_by('category__title')
rows = groupby(items, itemgetter('category__title'))
return Response({c_title: list(items) for c_title, items in rows})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1630 次 |
| 最近记录: |