Python Django问卷,每个答案有几个分数类别
我对Django非常陌生(当然对HTML已经生疏了),基本上已经看过几次官方教程了。我计划创建一个简单的问卷,其中包含一系列问题,这些问题可以有几个答案,每个答案都有不同类别的特定分数。最后,将添加每个类别的分数,并根据分数显示一条消息 然而,我对如何在模板中显示每个问题的答案有点困惑。我也不确定如何计算最终分数:我应该在模型中创建一个新类来存储分数吗?或者我应该只在views.py中执行它(我现在更喜欢这个解决方案,我不需要将分数存储在DB中,也不需要登录用户) 以下是我到目前为止的情况: models.py 来自django.db导入模型的Python Django问卷,每个答案有几个分数类别,python,html,django,django-templates,django-views,Python,Html,Django,Django Templates,Django Views,我对Django非常陌生(当然对HTML已经生疏了),基本上已经看过几次官方教程了。我计划创建一个简单的问卷,其中包含一系列问题,这些问题可以有几个答案,每个答案都有不同类别的特定分数。最后,将添加每个类别的分数,并根据分数显示一条消息 然而,我对如何在模板中显示每个问题的答案有点困惑。我也不确定如何计算最终分数:我应该在模型中创建一个新类来存储分数吗?或者我应该只在views.py中执行它(我现在更喜欢这个解决方案,我不需要将分数存储在DB中,也不需要登录用户) 以下是我到目前为止的情况: m
从django.contrib.auth.models导入用户
班级调查问卷(models.Model):
问卷调查文本=models.CharField(最大长度=200)
发布日期=models.datetime字段(“发布日期”)
定义(自我):
返回self.u文本
课堂提问(models.Model):
问卷=models.ForeignKey(问卷,on_delete=models.CASCADE)
问题文本=models.CharField(最大长度=200)
发布日期=models.datetime字段(“发布日期”)
定义(自我):
返回self.question\u文本
课程选择(models.Model):
问题=models.ForeignKey(问题,on_delete=models.CASCADE)
choice_text=models.CharField(最大长度=200)
C1=models.IntegerField(默认值为0)
C2=模型.整数字段(默认值=0)
N1=模型.整数字段(默认值=0)
N2=模型.IntegerField(默认值为0)
N3=models.IntegerField(默认值为0)
N4=models.IntegerField(默认值为0)
定义(自我):
返回self.choice\u文本
课堂提问回复(models.Model):
taker=models.ForeignKey(用户,on_delete=models.CASCADE)
问卷调查=models.ForeignKey(问卷调查,删除=models.CASCADE)
C1_分数=models.IntegerField(默认值=0)
C2_分数=models.IntegerField(默认值=0)
N1_分数=models.IntegerField(默认值=0)
N2_分数=models.IntegerField(默认值=0)
N3_分数=models.IntegerField(默认值=0)
N4_分数=models.IntegerField(默认值=0)
定义(自我):
返回str(自选)
views.py
从django.exe导入渲染
从django.http导入HttpResponse
从django.template导入加载器
模型导入问题、问卷、选择
def索引(请求):
最新问卷调查列表=问卷调查。对象。顺序('-pub_date')[:5]
template=loader.get_模板('test/index.html'))
上下文={
“最新调查问卷列表”:最新调查问卷列表
}
返回HttpResponse(template.render(上下文,请求))
def详细信息(请求):
最新的问题列表=question.objects.all()
template=loader.get_模板('test/detail.html'))
上下文={
“最新问题列表”:最新问题列表
}
返回HttpResponse(template.render(上下文,请求))
def结果(请求):
问卷\实例=QuestionnaResistence.objects.get(taker=request.user)
answer\u instance=Choice.objects.all()
如果request.method==“POST”:
问卷调查\实例.C1 \分数=+答案\实例.值\列表('C1',flat=True)[选定答案]\不知道如何在此处调用特定选定答案的分数
url.py
从django.url导入路径
从…起导入视图
应用程序名称='测试'
URL模式=[
路径(“”,views.index,name='index'),
路径('detail/',views.detail,name='detail'),
路径('results/',views.results,name='results'),
]
detail.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
{% if latest_question_list %}
{% for item in latest_question_list %}
<h1>{{ item.question_text}}</h1>
{% for answer in item.choice_set.all %}
<form action="{% url 'oritest:results'%}" method="post">
<p>
{% csrf_token %}
<input type="checkbox" name="answer" id="answer"
value="{{ answer.id }}">
<label for="answer">{{ answer.choice_text }}
</label><br>
</p>
{% endfor %}
{% endfor %}
<input type="submit" value="Confirm">
<input type="button" onclick="history.back();" value="Back">
</form>
{% else %}
<p>No polls are available.</p>
{% endif %}
</body>
</html>
试验
{%if最新问题列表%}
{最新问题列表%中项目的百分比}
{{项目.问题{文本}
{item.choice_set.all%}中的答案为%
{%csrf_令牌%}
{{answer.choice_text}
{%endfor%}
{%endfor%}
{%else%}
没有投票
{%endif%}
我想:
1) 让detail.html
用单选按钮显示每个问题及其答案
2) 在views.py
中添加分数(可能在我的函数results
中,并在results.html
中显示),然后根据该分数执行操作
编辑:我已经自己解决了第一个问题(请参见detail.html
的代码)。我以后可能会玩一些脆的形状来让它变得更好,但到目前为止它看起来像我想要的那样。不过,我还得弄清楚评分系统
我已经将questionnairencement
类添加到models.py
以存储Choice
的分数。我想我必须:
1) 在我的视图中实例化(例如)C1_分数和结果中的C1
2) 在结果中也有类似于C1\u分数=+C1
的内容
3) 根据C1_分数,在results.html中显示某些内容(例如用户分数和图片)
不过,我不确定根据用户实例化C1_分数的语法
Edit2:是否有任何信息需要我添加才能获得提示?对于表单本身,我强烈推荐crispy表单。它们看起来不错,可以节省一点工作量
我建议您将正确答案存储在数据库中,以便于评分,并创建一个响应模型来存储提交的答案。然后,在每个问题之后,您将通过success_url将响应pk传递给呈现结果模板的结果视图 谢谢。我已经设法使我的detail.html看起来像我想要的(见上面的编辑)。我还在我的模型中创建了一个新的问题回复
类来存储我的选择的每个值