Django formsets - рендеринг полей из модели и сохранение вводимых данных в другой модели

У меня есть сомнения по поводу использования formset с представлениями на основе классов, это может быть проще, но я пока не смог разобраться.

У меня есть следующие модели:

class ProjectModel(models.Model):
 charcode = models.Charfield(unique=True)

class QuestionModel(models.Model):
 title = models.Charfield()
 type = models.CharField(choices=('text','rate'))

class SurveyModel(models.Model):
 project = models.ForeignKey(ProjectModel)
 active = models.BooleanField(default=False)
 questions = models.ManyToManyField(QuestionModel)

class AnswerModel(models.Model):
 question = models.ForeignKey(QuestionModel)
 response_text = models.TextField()
 response_rate = models.IntegerField(choices=(1,2,3,4,5))

class SubmissionModel(models.Model):
 user = models.ForeignKey(get_user_model())
 survey = models.ForeignKey(SurveyModel)
 answers = models.ManyToManyField(AnswerModel)

Мне нужно представление для визуализации questions активного survey, чтобы пользователь мог заполнить его в форме, которая будет создавать answers объекты и submission объект.

Итак, у меня есть этот url: path('submission/<str:charcode>/, SubmissionView.as_view())

это представление, которое получает charcode от url:

class SubmissionView(CreateView):
 form_class = SubmissionFormSet
 template_name='create_submission.html'

и этот набор форм (в строительстве):

class SubmissionFormSet(form.BaseFormSet):
 # need to get questions from survey_objects.get(project__charcode = 'charcode', active=True)
 # define each field based on question type to properly widget choice
 # save answers and submission based on responses from user

У меня пока нет идей, но я предполагаю, что должен использовать formset_factory, возможно, внутри представления, как AnswerFormset = formset_factory(AnswerForm, formset=SubmissionFormSet), но не уверен, как это сделать

Вернуться на верх