django - 如何根据相似的值将结果分组到数组中,Django Model/Serializers
问题描述
还有 2:根据值对序列化程序结果进行分组
像上面的其他人一样,我需要以特定方式返回的结果。我想将包含一列相似值的结果组合在一起。
如上所述,我想这样做:
album | title | singer
-------+-------------------+----------
1 | exampleSongTitle | someone
1 | exampleSongTitle | sometwo
2 | exampleSongTitle | somethree
2 | exampleSongTitle | someone
得到这个
[
{
"album": 1,
"tracks": [
{
"title": exampleSongTitle,
"singer": someone
},
{
"title": exampleSongTitle,
"singer": sometwo
}
]
},
{
"album": 2,
"tracks": [
{
"title": exampleSongTitle,
"singer": somethree
},
{
"title": exampleSongTitle,
"singer": someone
}
]
}
]
我的模型:
class Songs(models.Model):
title = models.CharField(db_column='Title', max_length=400, blank=True, null=True)
album = models.CharField(db_column='Album', max_length=400, blank=True, null=True)
singer = models.CharField(db_column='Singer', max_length=400, blank=True, null=True)
class Meta:
managed = False
db_table = 'Songs'
专辑值将是来自同一专辑的曲目的相同值。
解决方案
由于表格看起来相当平坦,因此您必须在从数据库中获取结果后进行格式化/分组。您可以使用itertools.groupby来执行此操作
result = []
for album, songs in itertools.groupby(Song.objects.order_by('album'), lambda s: s.album):
result.append({
"album": album,
"tracks": [{
"title": song.title,
"singer": song.singer
} for song in songs]
})
推荐阅读
- excel - 有条件地转置excel数据
- javascript - 为什么 nuxt 内容获取方法不起作用?
- sql - 使用 JOIN 生成语法错误的 UNION ALL 子查询
- dpdk - 缺少 DPDK UDP 数据包有效负载
- c++ - 使用 std::string::c_str() 修改底层 std::string 是否安全?
- html - 我不明白为什么 HTML 表单不符合要求
- python - 在 Python 中显示菱形
- reactjs - 提交后重置 React-Select (Unform)
- python - 将多个 swagger 文档(来自不同应用程序)合并到一个 swagger 仪表板 [drf_yasg]
- prolog - Prolog - 数字列表的数字