- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在 Django 中为测验系统创建一个模型。每个问题有一个问题和 5 个选项。
class Question(models.Model):
quiz_question=models.CharField(max_length=1000)
option1=models.CharField(max_length=500)
option2=models.CharField(max_length=500)
option3=models.CharField(max_length=500)
option4=models.CharField(max_length=500)
option5=models.CharField(max_length=500)
这里只有一个答案是正确的答案。哪种是在这里表示答案的最佳方式?是通过添加另一个字段还是可以通过编辑现有字段来完成?
最佳答案
几个月前,我有一个基于问题系统的类似 django 项目。就您而言,我认为您需要创建一个新的 Answer
模型,将 ForeignKey
添加到 Question
模型。
这是我的models.py
:
from django.db import models
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.db.models import (Q, Count, Sum)
from django.utils.translation import ugettext, ugettext_lazy as _
from django.utils.encoding import python_2_unicode_compatible
class TimeStampedModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class QuestionQuerySet(models.QuerySet):
def published(self):
return self.filter(publish=True)
@python_2_unicode_compatible
class Question(TimeStampedModel):
title = models.CharField(max_length=200)
TYPE_CHOICES = (
('short', _('Sort')),
('medium', _('Medium')),
('complete', _('Complete'))
)
type = models.CharField(
max_length=200,
choices=TYPE_CHOICES,
default='short'
)
weight = models.PositiveIntegerField()
publish = models.BooleanField(default=True)
objects = QuestionQuerySet.as_manager()
def __str__(self):
return self.title
@property
def total_score(self):
answer = Answer.objects.filter(
question__pk=self.pk
).annotate(Sum('score'))
return answer # .count()
def get_answers(self):
return Answer.objects.filter(
question__pk=self.pk
)
get_answers.allow_tags = True
class Meta:
verbose_name = _('Detail Question')
verbose_name_plural = _('Questions')
ordering = ['-created']
@python_2_unicode_compatible
class Answer(models.Model):
question = models.ForeignKey(
Question, related_name='question_answer'
)
answer = models.CharField(max_length=200)
score = models.PositiveIntegerField()
def key_generator():
import uuid
key = uuid.uuid4().hex
if BaseAnswerUser.objects.filter(key=key).exists():
return "{0}-{1}".format(key, uuid.uuid4().hex)
return key
@python_2_unicode_compatible
class BaseAnswerUser(TimeStampedModel):
"""
To save the answers that already answered by user.
in this case, is such as session method.
"""
user = models.ForeignKey(
User, related_name='user_answer'
)
key = models.CharField(
max_length=200,
unique=True,
default=key_generator
)
def get_absolute_url(self):
return reverse('result', kwargs={'key': self.key})
def get_answers(self):
return AnswerUser.objects.filter(
base_answer__key=self.key
)
def __str__(self):
return _('Result analyze for %(user)s') % {
'user': self.user.username,
}
class Meta:
verbose_name = _('Base Answer User')
verbose_name_plural = _('Base Answer Users')
ordering = ['-created']
@python_2_unicode_compatible
class AnswerUser(TimeStampedModel):
question = models.ForeignKey(
Question, related_name='question_answer_user'
)
base_answer = models.ForeignKey(
BaseAnswerUser, related_name='base_answer_user'
)
score = models.PositiveIntegerField(
null=True, blank=True
)
text_answer = models.TextField(
null=True, blank=True
)
@property
def weight(self):
return self.question.weight
def __str__(self):
return _('Result for %(question)s') % {
'question': self.question
}
class Meta:
verbose_name = _('Detail User Answer')
verbose_name_plural = _('User Answers')
ordering = ['-created']
为了处理仪表板 django admin 中的答案,我使用了 admin.TabularInline
。欲了解更多,您可以查看此gist
And see also how to handle Django multiple input field values with same name
希望对你有帮助..
<小时/>我之前的答案是针对动态答案系统的,例如:
问题 A (有 4 个选项答案)
问题 B (有 3 个选项答案)
如果您实现静态答案系统,据我所知:
The Session Answer User is represented as Base Answer User from my previous answer;
[ Question ] -------------------+
- title (chr) |
- description (chr) |
- weight (int) |
| |
| |
| |
\./ \./
[ Answer ] [ Answer User ]
- fk_question (int) - fk_question (int)
- option_a (chr) - fk_session_answer (int)
- scroe_a (int) - score (int) # save the final score
- option_b (chr) /'\
- score_b (int) |
|
|
|
[ Session Answer User ]
- fk_user (int)
- session_key (char:unique)
- created (date)
|
|
\./
[ User Model ]
- username (chr)
- date_joined (date)
我想查找特定用户和特定 session 的总分的示例。
>>>
>>> session = get_object_or_404(SessionAnswerUser, user=request.user, session_key='key-key-key')
>>> answered_questions = AnswerUser.objects.filter(session_answer=session)
>>>
>>> # Find total scores. eg: {'score__sum': 15}
>>> answered_questions.aggregate(Sum('score'))['score__sum']
15
>>>
session_key
?After the User answered all question (create mode), then redirecting to the result page. an example:
@login_required
def save_answers(request):
"""
This view isn't using django forms,
but only handling at the templates and this view.
Because until now I don't know how to handle it.
"""
if request.method == 'POST':
# retrieve all id/pk's from the `questions` (model:Question)
questions = request.POST.getlist('question')
# retrieve all id/pk's from the `answers`. (model:Answer)
answers = [request.POST['answer-{}'.format(q)] for q in questions]
# saving the session with `key_generator()`, see my previous answer.
session = SessionAnswerUser.objects.create(user=request.user)
session.save()
# Makesure the length of `questions` is same with length of `answers`
# 1 answer for 1 question
if len(questions) == len(answers):
for n in range(len(questions)):
dict_answer = {
'question': Question.objects.get(pk=questions[n]),
'session': session, # from latest session above
'score': answers[n]
}
answered_questions = AnswerUser.objects.create(**dict_answer)
answered_questions.save()
# redirecting to the result page.
return redirect('/result/page', key=session.session_key)
else:
# length of `questions` is not same with length of `answers`
# do stuff...
@login_required
def result_page(request, key):
session = get_object_or_404(SessionAnswerUser, session_key=key)
answered_questions = AnswerUser.objects.filter(session=session)
# I hope you already know how to use the django queryset.
# eg:
# >>> session.user
# <User: john smith>
# >>>
# >>> answered_questions
# <QuerySet: [<AnswerUser: foobar lorem>, <AnswerUser: xxxx>]>
# >>>
# >>> answered_questions.first()
# <AnswerUser: foobar lorem>
# >>> answered_questions.first().score
# 3
...
# your context goes here..
关于python - 测验系统模型 字段选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41919152/
我知道这曾经是一个话题,但搜索后我找不到答案 - 也许我的问题太基本了。不过,我正在创建一个 html 测验 - 5 页,分数从一页到下一页,然后在最后评分。 这是我正在尝试使用的代码,但它根本不起作
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在做一个简单的 php 问答游戏。我将问题和答案存储在数据库中。我的 tblQuiz 的表结构是这样的: _id, question, answer1, answer2, answer3, cor
我在考试中遇到了这个问题。 以下不正确 javascript 代码的输出是什么?错误是什么? num=0; if (num > 10); { num = num + 10; } alert(n
我在 JavaScript 中验证 4 个问题多项选择测验时似乎遇到了一些问题。现在,如果没有选择任何答案,则会弹出警报,但即使只选择了一个答案,警报也不会弹出。我正在将我的函数作为提交按钮的 onc
我正在尝试使用 JavaScript 构建一个问答游戏。 测验答案存储在变量中,如下所示: var correctAnswer = $('#createCorrectAnswer').val(); 然
下面我做了一个小测验,有 4 个问题,问题 2,3 和 4 被 CSS 隐藏了,但是你可以尝试从 CSS 中删除样式 (".pytja2, .pytja3, .pytja4 { display: no
private void startGame() { System.out.println("Exercises must be completed as quickly as pos
这听起来像是我之前问过的问题,但它只得到了部分回答。所以我想从我提出的问题开始。然后,一旦到达最后一个问题(#5),它就会返回到第一个问题(#1),当到达起始问题时,它将停止。我尝试在以下代码中执行此
愚蠢的问题,但我的教授不回复电子邮件,所以我在这里问。我现在正在复习期末考试,并且正在复习期中考试来学习。现在,这真的很愚蠢,因为我两个月前就答对了这个问题。但对于我的一生来说,现在回想起来,我无法弄
我无法编写一个循环来计算我为我的 wordpress 网站创建的测验的分数。 测验样式是“将 A 列中的项目与 B 列中的项目进行匹配”。 B 列项目使用选择元素来匹配 A 列中的相应项目。 我能想到
为什么选择不正确单选选项时,if语句中的else仍然出现? else 部分只应在未选择单选按钮时出现。真正的结果是下一个问题和可能的答案出现。这是 jsfiddle .我做错了什么? function
我正在尝试为西类牙语类(class)创建测验。我对 JavaScript 经验不多,但对 html 和 CSS 相当精通。我有一个问题,然后是三个带答案的单选按钮。有两个错误答案和一个正确答案。我总共
我正在编写一个允许用户设置个人测验的程序(如记事卡式系统)。参加测验时,用户会在每个问题上计时。虽然答案不会是多项选择,但它们将由用户输入。 有没有一种方法可以让我充分接受那些不是他们第一次设置测验时
我正在尝试根据找到的教程创建一个简单的测验。 http://css-tricks.com/building-a-simple-quiz/ 不幸的是,这让我无法自拔,答案可能非常简单。 我让这个工作完美
最近我遇到了以下测验。想象一下我们有这张 table +--------+ | colors | +--------+ | red | | black | | white | | green
这里的 W3Schools 网站上发布了一个 jQuery 测验... http://www.w3schools.com/quiztest/quiztest.asp?qtest=jQuery 问题#1
我正在写一个简单的在线测验。有四个单选按钮作为选择。最初,脚本仅填充第一个问题的选项。之后,用户应该选择下一个并单击按钮。如果答案与正确的匹配,则总数递增。否则,将加载下一个问题。提交第 10 个问题
我不是 Haskell 程序员,但我对以下问题感到好奇。 非正式函数规范: 令 MapProduct 为一个函数,它采用名为 F 的函数和多个列表。它返回一个列表,其中包含使用每个可能组合中每个列表中
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!