Django модели для вопросника с вопросами с различными типами ответов
Этот вопрос похож на Разработка моделей Django для вопросов с различными типами ответов, но, надеюсь, более конкретный. Для моего конкретного случая я вижу различные способы реализации, но я не уверен, какой способ будет хорошим.
У меня есть базовая модель пользователя. Пользователям предлагается анкета, которая может быть одинаковой для разных пользователей, но также может отличаться от одного пользователя к другому, а также может быть разной в разные дни для одного пользователя. В каждой анкете есть разные вопросы, и вопросы могут иметь разные типы ответов (text, int, etc). В конце я хочу получить список анкет с ответами для конкретного пользователя (например, за последнюю неделю для пользователя X).
Я полагаю, что одним из способов реализации этого будет только один тип ответа (текст), и пусть форма обрабатывает валидацию, а представление обрабатывает рендеринг с правильным форматированием ответа:
class Question(models.Model):
question_text = models.CharField()
answer_type = models.CharField()
class Questionnare(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
questions = models.ManyToManyField(Question, through='Answer')
date = models.DateField(auto_now_add=True)
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
questionnaire = models.ForeignKey(Questionnare, on_delete=models.CASCADE)
answer = models.TextField()
Возможно, другим способом было бы иметь различные классы Answer и мультинаследование, как описано здесь . (Пока не тестировал.)
Или я могу иметь различные классы ответов без модели Questionnaire, запрашивать различные модели ответов (по дате+пользователю) и затем соединять все вместе в соответствующем представлении.
Какой вариант был бы "лучшим" или у вас есть другие идеи? (Количество вопросов, вероятно, будет наименьшим, затем количество пользователей)