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), но не уверен, как это сделать