如何使用form.py在模型中创建具有值的动态表单?

时间:2019-04-10 09:30:31

标签: django django-models django-forms

我想使用forms.py创建一个动态表单,其中问题和答案来自模型列中的值。

我有三个模型,一个叫做Sheet,其中包含来自Question模型的许多问题(多对多)。问题模型可以包含一个或多个答案模型中的答案(多对多)

在我的views.py中,我的函数从Sheet模型中检索所有值,并将值发送到我的html文件中。

在我的html文件中,我有一个代码,可以显示所有问题及其答案。

class Sheet(models.Model):
    form = models.ForeignKey(Form, on_delete=models.CASCADE)
    question = models.ManyToManyField(Question, blank=True)
    sheet_name = models.CharField(max_length=256)
    creation_date = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.sheet_name


class Question(models.Model):
    is_parent = models.ManyToManyField("self", blank=True)
    answer = models.ManyToManyField(Answer, blank=True)
    in_french = models.TextField(max_length=512)
    in_english = models.TextField(max_length=512)

    def __str__(self):
        return self.in_french


class Answer(models.Model):
    in_french = models.CharField(max_length=32)
    in_english = models.CharField(max_length=32)

    def __str__(self):
        return self.in_french
{% for a_sheet in all_sheets %}
    <b>Survey: {{ a_sheet.sheet_name}}</b>
        {% for q in a_sheet.question.all %}
            <label>Question: {{ q.in_english }}</label><br/>
            <label>Answers:</label>
            {% if q.answer.all %}
                <select> 
                    {% for a in q.answer.all %}  
                        <option value={{ a.id }}> {{ a.in_french }} </option> 
                    {% endfor %} 
                </select>
            {% else%}
             <input type="text" name="answer">
            {% endif %}
        {% endfor %}
{% endfor %}

我的问题是如何翻译我的html代码以将其放入forms.py文件中。将代码放在forms.py文件的函数中将允许我设置条件并检索表单的结果以将其放入另一个模型。默认情况下,不能使用forms.ModelForm解决此问题。该窗体在表单中显示模型列。

非常感谢您的帮助

0 个答案:

没有答案