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, запрашивать различные модели ответов (по дате+пользователю) и затем соединять все вместе в соответствующем представлении.

Какой вариант был бы "лучшим" или у вас есть другие идеи? (Количество вопросов, вероятно, будет наименьшим, затем количество пользователей)

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