【发布时间】:2016-11-23 14:06:49
【问题描述】:
我需要使用用户保存的数据预填充表单集字段
这是我的 form.py
EssayQuestionFormSetBase = modelformset_factory(models.EssayQuestion,
extra=0,
fields=('prompt',),
widgets={
'prompt': forms.TextInput(
attrs={'readonly': True, 'class': 'borderless'}),
},
)
class EssayQuestionFormSet(EssayQuestionFormSetBase):
def add_fields(self, form, index):
super(EssayQuestionFormSet, self).add_fields(form, index)
form.fields['answer'] = forms.CharField(widget=forms.Textarea, label='')
如您所见,我在 EssayQuestionFormSet 中添加了一个接受答案的字段
我的 views.py 如下所示:
class QuizDetail(View):
def get(self, request, **kwargs):
step = models.Quiz.objects.get(pk=self.kwargs['step_pk'])
eqs = models.EssayQuestion.objects.filter(quiz_id=self.kwargs['step_pk'])
eqs_formset = forms.EssayQuestionFormSet(queryset=eqs, prefix='essay')
def post(self, request, *args, **kwargs):
step = models.Quiz.objects.get(pk=self.kwargs['step_pk'])
eqs = models.EssayQuestion.objects.filter(quiz_id=self.kwargs['step_pk'])
eqs_formset = forms.EssayQuestionFormSet(request.POST, queryset=eqs, prefix='essay')
if eqs_formset.is_valid():
for form in eqs_formset:
# create a NEW Answer for this form's associated question
new_answer = models.Answer.objects.create(question=form.instance,
eq_answer_text=form.cleaned_data.get('answer'),
student=models.Student.objects.get(user=request.user.pk))
目前,视图正确地为 get 上的答案字段呈现空的 Textarea 字段,并正确保存帖子上的答案。但是,我的问题是,如何使用用户保存的答案预先填充答案字段?
这是答案模型
class Answer(models.Model):
date_answered = models.DateTimeField(default=timezone.now)
student = models.ForeignKey(Student, blank=True, null=True, related_name='answers')
question = models.ForeignKey(Question)
eq_answer_text = models.TextField(blank=False, null=True)
【问题讨论】:
-
我不确定表单集是否适合这里的解决方案。您不是在尝试创建或编辑论文问题,而是在尝试为每个问题创建/更新一个答案。
-
什么是合适的解决方案?对不起,我刚开始学习 Django