显示 Django 表单答案
Displaying Django form answers
我在Django网站上找不到这个问题的解决方案,目前我有如下所示的表格:
它保存到我的 models.py 如下:
我想做的是使用表单的答案并使用此表单的答案作为问题来创建一个新表单,基本上是重新创建此表单并重用字段但更改字段并将其显示在独一无二的 URL
class InitialForm(forms.Form):
Teacher_Name = forms.CharField(label='Teacher Name')
Test_Name = forms.CharField(label='Label this test')
Subject = forms.CharField(label = 'Subject')
Question = forms.CharField(label = 'What is the first question?')
Topic = forms.CharField(label = 'What topic is this on?')
Option1 = forms.CharField(label = 'What is the first option?')
Option2 = forms.CharField(label = 'What is the second option?')
Option3 = forms.CharField(label = 'What is the third option?')
Option4 = forms.CharField(label = 'What is the fourth option?')
Answer = forms.CharField(label = 'Which option is the correct option?', widget=forms.Select(choices=Options))
class Questions(models.Model):
testID = AutoSlugField(unique=True)
test_label = models.CharField(max_length=1000)
teacherName = models.CharField(max_length=1000, null = True)
studentID = models.ForeignKey(Student, on_delete=models.CASCADE, null = True)
Subject = models.CharField(max_length=1000)
Q1 = models.CharField(max_length=1000, null = True)
Topic1 = models.CharField(max_length=1000)
Option1_Q1 = models.CharField(max_length=1000)
Option2_Q1 = models.CharField(max_length=1000)
Option3_Q1 = models.CharField(max_length=1000)
Option4_Q1 = models.CharField(max_length=1000)
AnswerQ1 = models.CharField(max_length=1000)
``
您需要退后一步,想想您要在数据库中存储哪些对象以及您如何处理它们,最重要的是,它们是如何相关的。尽早把关系弄好才是最重要的,因为以后最难改变。
我猜想有一个 Test
之类的东西,它有 Question
s,并且每个 Student
将向 Test
发送 Answer
s ].
Question
对象将具有与 Test
的外键关系。 Answer
对象将与 Test
和 Student
.
有 ForeignKey
关系
你现在有一整套观点要写了。将有 CreateView
和 UpdateView
(可能还有 DeleteView
)(经过验证!)教师将使用它们来为特定 Test
操作 Question
对象。 Question
的文本和选项的详细信息将显示给每个参加测试的学生;学生将回答他选择的正确答案,该答案将被记录为 Answer
对象`
student-answer 表单将只输入一个字段:学生选择的答案(A 到 D,还是 1 到 4?)学生看到的将是一个 Question
对象的显示: read-only 教师输入的问题数据视图。
很有可能,在掌握了这个窍门之后,您将引入 Teacher
和 Course
对象(多个 Test
对象链接到一个 Course
。一个或更多 Teacher
个对象链接到一个 Course
, ...)
固执己见,但这正是 Class-Based 视图使问题变得简单的问题,所以请使用它们。
我在Django网站上找不到这个问题的解决方案,目前我有如下所示的表格:
它保存到我的 models.py 如下:
我想做的是使用表单的答案并使用此表单的答案作为问题来创建一个新表单,基本上是重新创建此表单并重用字段但更改字段并将其显示在独一无二的 URL
class InitialForm(forms.Form):
Teacher_Name = forms.CharField(label='Teacher Name')
Test_Name = forms.CharField(label='Label this test')
Subject = forms.CharField(label = 'Subject')
Question = forms.CharField(label = 'What is the first question?')
Topic = forms.CharField(label = 'What topic is this on?')
Option1 = forms.CharField(label = 'What is the first option?')
Option2 = forms.CharField(label = 'What is the second option?')
Option3 = forms.CharField(label = 'What is the third option?')
Option4 = forms.CharField(label = 'What is the fourth option?')
Answer = forms.CharField(label = 'Which option is the correct option?', widget=forms.Select(choices=Options))
class Questions(models.Model):
testID = AutoSlugField(unique=True)
test_label = models.CharField(max_length=1000)
teacherName = models.CharField(max_length=1000, null = True)
studentID = models.ForeignKey(Student, on_delete=models.CASCADE, null = True)
Subject = models.CharField(max_length=1000)
Q1 = models.CharField(max_length=1000, null = True)
Topic1 = models.CharField(max_length=1000)
Option1_Q1 = models.CharField(max_length=1000)
Option2_Q1 = models.CharField(max_length=1000)
Option3_Q1 = models.CharField(max_length=1000)
Option4_Q1 = models.CharField(max_length=1000)
AnswerQ1 = models.CharField(max_length=1000)
``
您需要退后一步,想想您要在数据库中存储哪些对象以及您如何处理它们,最重要的是,它们是如何相关的。尽早把关系弄好才是最重要的,因为以后最难改变。
我猜想有一个 Test
之类的东西,它有 Question
s,并且每个 Student
将向 Test
发送 Answer
s ].
Question
对象将具有与 Test
的外键关系。 Answer
对象将与 Test
和 Student
.
ForeignKey
关系
你现在有一整套观点要写了。将有 CreateView
和 UpdateView
(可能还有 DeleteView
)(经过验证!)教师将使用它们来为特定 Test
操作 Question
对象。 Question
的文本和选项的详细信息将显示给每个参加测试的学生;学生将回答他选择的正确答案,该答案将被记录为 Answer
对象`
student-answer 表单将只输入一个字段:学生选择的答案(A 到 D,还是 1 到 4?)学生看到的将是一个 Question
对象的显示: read-only 教师输入的问题数据视图。
很有可能,在掌握了这个窍门之后,您将引入 Teacher
和 Course
对象(多个 Test
对象链接到一个 Course
。一个或更多 Teacher
个对象链接到一个 Course
, ...)
固执己见,但这正是 Class-Based 视图使问题变得简单的问题,所以请使用它们。