Я пытаюсь реализовать проект, похожий на формы Google. У нас есть несколько ActivityType
(аналог формы Google). Например, домашняя проверка является ActivityType
.
Каждый ActivityType
может иметь несколько question
. Как «Какой домашний адрес?», «Сколько соседей?». Каждый question
может иметь разные type
, например TextField
, ChoiceField
и т. Д.
Каждый ActivityType
может иметь несколько представлений. Каждое представление может содержать ответы на некоторые или все вопросы в упражнении.
Как реализовать это наиболее логично и кратко?
Мой подход (и вопросы)
- Используя администратор Django, можно определить несколько
ActivityType
. - Каждый
ActivityType
содержит несколько вопросов, используя StackedInline
. Questions
хранятся в виде массива json в самой модели ActivityType
. Как показать массив JSON модели в StackedInline
? - Модель
Response
содержит представления. Он просто содержит форму ForeignKey для ActivityType
. Response
, которая должна быть отображена в соответствии со структурой, определенной массивом question
JSON. Как использовать пользовательскую форму для этого?
Мой код
models.py
class ActivityType(models.Model):
activity_name = models.CharField(max_length=200)
questions_json = JSONField()
class ActivityAnswers(models.Model):
activity_event = models.ForeignKey("ActivityEvent", on_delete=models.SET_NULL)
user = models.ForeignKey(User, on_delete=models.SET_NULL)
answers = JSONField()
forms.py
class ActivityTypeQuestionForm(forms.ModelForm):
Q_TYPES = (
('multiple_choice', 'Multiple Choice'),
('text_field', 'Text Field'),
('integer_field', 'Integer Field'),
)
question_name = forms.CharField(max_length=200)
question_type = forms.ChoiceField(choices= Q_TYPES)
class Meta:
model = ActivityType
exclude = []