在Django中创建动态表单(不仅在项目数量上,而且在结构上)
我是django的新手,我正在努力发展以下方面。我有一个调查应用程序,其中管理员用户可以提供一个新的调查模板创建一个CSV,每个问题的问题和答案数量可变,其中可能是正确的或错误的模糊 这是使用以下三种不同型号存储的:在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)
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]