Предварительно заполненные отношения "многие ко многим" в форме Django
Я работаю над приложением, в котором участвуют кандидаты. Во время подачи заявки каждый кандидат должен ответить на несколько открытых вопросов (например, "Почему вы хотите присоединиться к компании?"). Вопросы, задаваемые кандидату, не предопределены в приложении, я хочу, чтобы администратор мог создавать или изменять вопросы, которые будут задаваться будущим кандидатам.
Для этого я реализовал следующие модели :
class Candidate(models.Model):
# (...)
answers = models.ManyToManyField('Question', through='Answer')
class Question(models.Model):
text = models.CharField(max_length=200)
class Answer(models.Model):
candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
text = models.CharField(max_length=100)
Идея состоит в том, чтобы хранить вопросы, созданные администратором в модели, и хранить ответы, данные кандидатом, в промежуточной таблице Answer
Затем я создал несколько форм для моделей :
class CandidateForm(forms.ModelForm):
class Meta:
model = Candidate
fields = ['first_name', 'last_name', 'birth_date', 'email']
class AnswerForm(forms.ModelForm):
class Meta:
model = Answer
fields = ['question', 'text']
AnswerInlineFormset = forms.inlineformset_factory(Candidate, Answer, form=AnswerForm)
И я использую CreateView
для отображения формы:
class CandidateFormView(CreateView):
template_name = 'candidates/candidate.html'
form_class = CandidateForm
def get_context_data(self, **kwargs):
context = super(CandidateFormView, self).get_context_data(**kwargs)
context['answers_formset'] = AnswerInlineFormset
return context
На данный момент форма отображает только поля из модели Candidate
(имя, фамилия и так далее), а набор форм с Question
выбирает поле со всеми доступными вопросами и пустым текстовым полем для ответа. Это ожидаемо, набор форм не заполнен никакими данными, поэтому он просто отображает поля, чтобы пользователь мог определить отношения.
Конечно, я не хочу, чтобы пользователь выбирал, на какой вопрос он хочет ответить! Поэтому я хочу предварительно заполнить набор форм вопросами из базы данных (и использовать их как метку вместо поля, но я думаю, что эта часть не слишком сложна)
Что-то вроде этого (с заполнением вопросов из модели Question
):