我正在使用 Django 构建一个应用程序,它将有一个硬编码的测验,用户将定期填写 4 个选项。我无法实现这一点,以便用户可以在一页上填写表格,并保存与用户和当前日期相关的实例。有人可以帮忙解决这个问题吗?
模型.py
ANSWER_CHOICES = (
(1, 'Never'),
(2, 'Almost Never'),
(3, 'Sometimes'),
(4, 'Fairly Often'),
(5, 'Very Often'),
)
class Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='answer', null=True)
answer = models.CharField(max_length=200, null=True)
def __str__(self):
return self.answer
class Quiz(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quiz', null=True)
question = models.CharField(max_length=200)
answer = models.ForeignKey(Answer, on_delete=models.CASCADE, related_name='quiz_answer', null=True)
pub_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.question
视图.py
def test(request):
user = request.user
questions = Quiz.objects.all()
if request.method == 'POST':
form = Form(request.POST)
if form.is_valid():
test = Quiz(
answer=form.cleaned_data["answer"],
user=user
)
test.save()
return redirect('app:dashboard')
else:
form = Form()
context = {
'form':form,
}
return render(request, 'members/test.html', context)
表格.py
class Form(ModelForm):
answer = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=(Answer.objects.all()))
class Meta:
model = Quiz
fields = ['answer']
测试.html
<form method="POST">
{% csrf_token %}
<div class="card-body">
{{ form|crispy }}
</div>
<!-- /.card-body -->
<div class="card-footer">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
理想情况下,我希望表单具有以下结构:
1.When did this happen?
a)recently
b)a while back
c) a long time ago
d)today
2.When was your last login?
a)recently
b)a while back
c) a long time ago
d)today