javascript - Django:从模型创建 JSON 对象以返回模板

标签 javascript python json django

我正在开发一个基于 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]
        ]
    }
}

我怎样才能实现这一目标?

models.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]
        ]
    }
]

关于javascript - Django:从模型创建 JSON 对象以返回模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34315794/

相关文章:

python - 返回字典中的最大值

javascript - ajax 请求时对 JS 变量的 JSON 响应

javascript - JQuery slim scroll 不会滚动到最后一个元素

python - itertools 库中的 tee() 函数

Python:检查(非常大的)素数时为 "long int too large to convert to float"

java - 在 postman 帖子请求中发送 map

javascript - 使用 Javascript 检测图像的方向

javascript - 如何使用 Javascript 将字符串方程式转换为数值

json - 将 JSON 映射到 TS 类。如果 property 是一个对象并且在 JSON 中找不到,类应该有空 obj

javascript - 使用 getJSON 中的each 函数返回未定义