Javascript Django:从模型创建JSON对象以返回到模板
我正在做一个基于Django的测验,它将在Javascript的帮助下呈现。每个测验由若干个问题组成,基本上有一个问题文本和若干选择(这些选择可以是正确的,也可以是不正确的——理论上可能有多个正确答案) 我想从模板中调用get_all_questions_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]
{
{
"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作为测验。