Pre-populate formset with a user saved data on revisit

26 views
Skip to first unread message

Said Akhmedbayev

unread,
Nov 23, 2016, 9:29:10 AM11/23/16
to Django users
I need to pre-populate a formset field with a user's saved data

Here is my 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='')


As you can see, I added a field to accept answers in the EssayQuestionFormSet

My views.py looks like following:

    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))

               

Currently, the view properly renders empty Textarea field for the answer field on the get and properly saves answers on the post. My question, however, **how can I pre-populate the answer field with user's saved answer?**

Here is the Answer model

    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)

Reply all
Reply to author
Forward
0 new messages