Как я могу получить отдельный набор запросов со значением в виде списка? - PullRequest
0 голосов
/ 30 января 2019

Я занимаюсь рефакторингом приложения django с rest-framework.Я попытался вернуть пост с комментариями, и приложение работает с этим.

Это мой дизайн 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)

Я упоминал здесь , как я могу использовать сериализатор со списком.

1 Ответ

0 голосов
/ 30 января 2019

Я не знаю, как это можно сделать в запросе к базе данных.Но я очень надеюсь, что следующий код может решить вашу проблему.

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)]]

Затем вернется массив ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...