我正在使用其余框架重构Django应用程序。我试图返回带有评论的帖子,然后应用程序对此进行处理。
这是我的json设计,我无法更改模型。但是我可以更改json设计。
{
"id": 1
"title": "Title",
"content": "Content",
...,
"comments": [
[
{
"id": 1,
"parent": 0,
"content": "Content",
...
},
{
"id": 2,
"parent": 1,
"content": "Content",
...
},
],
[
{
"id": 3,
"parent": 0,
"content": "Content",
...
},
{
"id": 4,
"parent": 3,
"content": "Content",
...
},
],
],
...
}
在注释中,有许多列表按“组”列分组。在这种情况下,数据看起来像这样。
Comment(id=1, parent=0, content="Content", group=1)
Comment(id=2, parent=1, content="Content", group=1)
Comment(id=3, parent=0, content="Content", group=2)
Comment(id=4, parent=3, content="Content", group=2)
我想获取由group
列分隔的查询集。我想这样使用。
comments = Comment.objects.filter() # How can I get?
# [[Comment(id=1), Comment(id=2)], [Comment(id=3), Comment(id=4)]]
serializer = CommentSerializer(comments, many=True)
我向here提到了如何将序列化器与列表一起使用。
答案 0 :(得分:1)
我不知道该如何在数据库查询中完成。但是我非常希望以下代码可以解决您的问题。
comments = Comment.objects.order_by('-group')
# now we have <Comment(id=1), Comment(id=2), Comment(id=3), Comment(id=4)> as query_set
现在,我们将按组号分隔列表,然后将其合并。就像
response = []
current_group = [] # this will add in repose separated by group number
previous_group = -1 # assign anything that can't be a group number
for comment in comments:
serializer = CommentSerializer(comment)
if serializer.data['group'] == previous_group:
current_group.append(serializer.data)
else:
if previous_group != -1: # our previous assign value
response.append(current_group)
current_group = []
current_group.append(serializer.data)
previous_group = serializer.data['group']
else: # first value
current_group.append(serializer.data)
previous_group = serializer.data['group']
# check current_group list length
if len(current_group) > 0:
response.append(current_group)
现在我们的响应数组就像
[[Comment(id=1), Comment(id=2)], [Comment(id=3), Comment(id=4)]]
然后返回响应数组。