在Django中创建动态表单(不仅在项目数量上,而且在结构上)

在Django中创建动态表单(不仅在项目数量上,而且在结构上),django,forms,dynamic,Django,Forms,Dynamic,我是django的新手,我正在努力发展以下方面。我有一个调查应用程序,其中管理员用户可以提供一个新的调查模板创建一个CSV,每个问题的问题和答案数量可变,其中可能是正确的或错误的模糊 这是使用以下三种不同型号存储的: class Survey(models.Model): survey_name = models.CharField(max_length=50, unique=True) answer_key = models.CharField(max_length=250)

我是django的新手,我正在努力发展以下方面。我有一个调查应用程序,其中管理员用户可以提供一个新的调查模板创建一个CSV,每个问题的问题和答案数量可变,其中可能是正确的或错误的模糊

这是使用以下三种不同型号存储的:

class Survey(models.Model):
    survey_name = models.CharField(max_length=50, unique=True)
    answer_key = models.CharField(max_length=250)
    score_key = models.CharField(max_length=250)
    date = models.DateTimeField(auto_now_add=True)
    
class Question(models.Model):
    survey = models.ForeignKey(Survey, on_delete=models.CASCADE)
    text = models.CharField(max_length=250)
    
class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    text = models.CharField(max_length=250)
    valid = models.BooleanField(default=False)
我知道如何在视图中检索给定调查的关联对象并向它们显示模板,但不知道如何在表单中表示它们,因为每个问题的问题和答案数量事先不知道。也不确定在处理帖子时如何阅读

任何暗示都将不胜感激


谢谢

最后,我在不使用Django表单的情况下完成了这项工作,如下所示:

由于我了解调查结构,因为我从QuerySet中检索其组件,因此我可以在模板中创建自定义表单,以多选形式为可变数量的答案(answer1、answer2,…带有for循环)分配不同的值

        <form class="pure-form pure-form-stacked" action={% url 'SETA_surveys:make_survey' slug %} method="post">
        {% csrf_token %}
        <fieldset>
            {% for question in questions %}             
                <label for="question">{{question.text}}</label>
                {% for answer in answers %}
                    {% if answer.question.id == question.id %}
                        <p><input type="checkbox" name="answer{{forloop.counter0}}"/> {{ answer.text }}</p> 
                    {% endif %}
                {% endfor %}
            {% endfor %}
            <br>
        <input class="pure-button pure-button-primary" type="submit" value="Submit">
        </fieldset>
        </form>
当然,这不是最干净的方式,但至少对我有效:)

谢谢

        if request.method == 'POST':
            user_answers = ''
            for i in range(len(survey_answers)):
                if 'answer'+str(i) in request.POST:
                    user_answers = user_answers+'1-'
                else:
                    user_answers = user_answers+'0-'
            user_answers = user_answers[:-1]