Javascript Django:从模型创建JSON对象以返回到模板

Javascript Django:从模型创建JSON对象以返回到模板,javascript,python,json,django,Javascript,Python,Json,Django,我正在做一个基于Django的测验,它将在Javascript的帮助下呈现。每个测验由若干个问题组成,基本上有一个问题文本和若干选择(这些选择可以是正确的,也可以是不正确的——理论上可能有多个正确答案) 我想从模板中调用get_all_questions_json,然后接收如下内容: { { "Question 1": [ ["Answer 1-1", true], ["Answer 1-2", false]

我正在做一个基于Django的测验,它将在Javascript的帮助下呈现。每个测验由若干个问题组成,基本上有一个问题文本和若干选择(这些选择可以是正确的,也可以是不正确的——理论上可能有多个正确答案)

我想从模板中调用get_all_questions_json,然后接收如下内容:

{
    {
        "Question 1":
        [
            ["Answer 1-1", true],
            ["Answer 1-2", false],
            ["Answer 1-3", false]
        ]
    },

    {
        "Question 2":
        [
            ["Answer 1-1", false],
            ["Answer 1-2", true],
            ["Answer 1-3", false]
        ]
    },  

    {
        "Question 3":
        [
            ["Answer 1-1", false],
            ["Answer 1-2", false],
            ["Answer 1-3", true]
        ]
    }
}
我怎样才能做到这一点

型号。py:

class Quiz(models.Model):
    name = models.CharField(max_length=80)
    slug = models.SlugField()
    # to do feedback texts

    class Meta:
        verbose_name_plural = "Quizzes"

    def save(self, *args, **kwargs):
        if not self.id:
            # Newly created object, set slug
            self.slug = slugify(self.name)
        super(Quiz, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

    def get_all_questions(self):
        return self.question_set.all()

    def get_all_questions_json(self):
        #

class Question(models.Model):
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    text = models.CharField(max_length=200)
    image = models.ImageField()

    def __str__(self):
        return self.text


class Choice(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text = models.CharField(max_length=80)
    iscorrect = models.BooleanField()

    def __str__(self):
        return self.text

您可以迭代目标测验中的问题,并创建一个列表,稍后可以传递给
json.dumps

def get_all_questions_json(self):
    import json
    quiz_data = []
    for question in self.question_set.all():
        answers = []
        quiz_data.append({
            'text': question.text,
            'answers': [
                [answer.text, answer.is_correct]
                for answer in question.answer_set.all()
            ],
        })
    return json.dumps(quiz_data)
输出将与您所述略有不同,例如:

[
    {
        text: "Question 1",
        answers: [
            ["Answer 1-1", true],
            ["Answer 1-2", false],
            ["Answer 1-3", false]
        ]
    },
    {
        text: "Question 2",
        answers: [
            ["Answer 1-1", false],
            ["Answer 1-2", true],
            ["Answer 1-3", false]
        ]
    },
    {
        text: "Question 3",
        answers: [
            ["Answer 1-1", false],
            ["Answer 1-2", false],
            ["Answer 1-3", true]
        ]
    }
]

您可以迭代目标测验中的问题,并创建一个列表,稍后可以传递给
json.dumps

def get_all_questions_json(self):
    import json
    quiz_data = []
    for question in self.question_set.all():
        answers = []
        quiz_data.append({
            'text': question.text,
            'answers': [
                [answer.text, answer.is_correct]
                for answer in question.answer_set.all()
            ],
        })
    return json.dumps(quiz_data)
输出将与您所述略有不同,例如:

[
    {
        text: "Question 1",
        answers: [
            ["Answer 1-1", true],
            ["Answer 1-2", false],
            ["Answer 1-3", false]
        ]
    },
    {
        text: "Question 2",
        answers: [
            ["Answer 1-1", false],
            ["Answer 1-2", true],
            ["Answer 1-3", false]
        ]
    },
    {
        text: "Question 3",
        answers: [
            ["Answer 1-1", false],
            ["Answer 1-2", false],
            ["Answer 1-3", true]
        ]
    }
]

请检查您的模型,当问题没有外键时,测验如何设置self.question\u作为测验。请检查您的模型,当问题没有外键时,测验如何设置self.question\u作为测验。