1

Я пытаюсь создать приложение, подобное анкете. Я уже строить models.py, который выглядит следующим образом:Анкета Анкета - Django

# models.py 
class QuestionSet(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.TextField(blank=True) 

    def __str__(self): 
     return "{} Question Form".format(self.name) 

class Question(models.Model): 
    q_set = models.ForeignKey(QuestionSet, 
             on_delete=models.CASCADE, 
             related_name='questions') 
    text = models.CharField(max_length=100) 

    def __str__(self): 
     return self.text 

class Answer(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
           on_delete=models.CASCADE, 
           related_name='answers') 
    question = models.ForeignKey(Question) 
    text = models.CharField(max_length=100) 

    def __str__(self): 
     return "Answer to {}".format(self.question) 

Однако я борюсь придумать форму, которая будет корректно отображать это на переднем конце, а затем подтвердить введенные данные.

Я попытался отобразить текст вопроса из моей модели Question и добавить поля ввода ниже, все это без использования Django Forms. Хотя это может показаться, что оно работает, оно поднимает проблему проверки данных и связывания данных с определенным вопросом (скрытое поле с значением идентификатора вопроса).

Есть ли способ, где я могу создать форму, с несколькими Question s (все принадлежащие к одной и той же QuestionSet), который будет отображать поле только для чтения (текстовое поле Question с моделью) и соответствующее поле ввода под (текстовое поле Answer Модель)?

ответ

1

Вы должны сделать ModelForm для своей модели ответа. Ознакомьтесь с документами Django на modelforms, это очень просто, и проверка будет автоматически рассмотрена на основе того, что вы указали в модели.