Джанго / Python, приложение json с петлями - PullRequest
1 голос
/ 26 февраля 2020

Я собираю данные из некоторых django моделей в очень конкретном c порядке и выводю их в json для использования в React.

               quiz = LessonQuiz.objects.filter(lesson=details).order_by('position')

                quizdata = []
                if quiz.count() > 0:

                    for a in quiz:
                        qz = LessonQuiz.objects.get(id=a.id)
                        item = {'id': qz.id, 'title': qz.title}
                        if qz.linkbutton_set.count() > 0:
                            buttons = qz.linkbutton_set.all()
                            for b in buttons:
                                item[b.id] = {
                                    "id": b.id,
                                    "type": b.qtype,
                                    "text": b.text,
                                    "link": b.link,
                                    "color": b.color
                                }


                        quizdata.append(item)

в тот момент, когда он возвращает все данные, которые я хочу следующим образом:

[
  {
    "id": 3,
    "title": "Do you agree?",
    "1": {
      "id": 1,
      "type": "btn",
      "text": "I agree",
      "link": "/lesson/welcome/completed",
      "color": "#e2574c"
    },
    "2": {
      "id": 2,
      "type": "btn",
      "text": "I'm not sure I agree",
      "link": "/contact",
      "color": "#e2574c"
    },
    "3": {
      "id": 3,
      "type": "btn",
      "text": "I have a suggestion",
      "link": "/contact",
      "color": "#e2574c"
    }
  }
]

Однако, в идеале, я хотел бы иметь массивы 1, 2 и 3 в своем собственном массиве, например, data.

[
  {
    'id': 3,
    'title': 'Do you agree?',
    'data': [
      1: {
        'id': 1,
        'type': 'btn',
        'text': 'I agree',
        'link': '/lesson/welcome/completed',
        'color': '#e2574c'
      },
      2: {
        'id': 2,
        'type': 'btn',
        'text': "I'm not sure I agree",
        'link': '/contact',
        'color': '#e2574c'
      },
      3: {
        'id': 3,
        'type': 'btn',
        'text': 'I have a suggestion',
        'link': '/contact',
        'color': '#e2574c'
      }
    ]
  }
]

Любые рекомендации, как я могу достичь это?

В качестве альтернативы, есть ли еще Django способ достичь этого?

Заранее спасибо

1 Ответ

1 голос
/ 26 февраля 2020

Попробуйте использовать

quiz = LessonQuiz.objects.filter(lesson=details).order_by('position')
quizdata = []
if quiz.count() > 0:

    for a in quiz:
        qz = LessonQuiz.objects.get(id=a.id)
        item = {'id': qz.id, 'title': qz.title, 'data': []}   #Add key(data)-value(empty list)
        if qz.linkbutton_set.count() > 0:
            buttons = qz.linkbutton_set.all()
            for b in buttons:
                #append to `data`
                item['data'].append({b.id: {
                    "id": b.id,
                    "type": b.qtype,
                    "text": b.text,
                    "link": b.link,
                    "color": b.color
                    }
                }
        quizdata.append(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...