我究竟应该如何在Django表单中实现条件逻辑?

时间:2016-02-23 15:02:36

标签: javascript jquery python django

我正在尝试在我的Django模型中添加一些条件逻辑,这比我预期的要困难得多。我想要做的是:如果用户选择选项A,我想再显示一个问题,如果他们选择选项B,我想要显示另一个问题。

我发现this answer - 这正是我想要的,它说的是首先制作具有可选值的字段(即不需要),然后根据逻辑使用Javascript来隐藏字段。但它没有解释如何。

我想我可以弄清楚JS位,但我想了解的是如何以及在何处添加它。我假设在forms.py中,可能在小部件中? 如果可能的话,我会喜欢一个实现示例。非常感谢提前!

1 个答案:

答案 0 :(得分:2)

正如您已经提到过的,最简单的方法就是创建一个包含所有字段(必需和可选)的表单,并使其中一些字段不可见,直到您希望它们出现(按例如,在其他领域中选择一些选项)。 要做到这一点,你应该:

  1. 在forms.py。

    中创建一个包含所需字段的表单
    Class MyForm(forms.Form):
        #fields go here
    
  2. 将表单传递给所需的模板。

    def myview(request):
        form = MyForm()
        c = {'form': form}
        return render(request, 'mytemplate.html', c)
    
  3. 在模板中渲染表单。

    <form action="/your-name/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>
    
  4. 现在所有魔法都进入.js文件。它可能应该在/static/js/文件夹中,并且可以根据需要进行命名。选择您想要通过id隐藏的字段(例如,jQuery将更容易按类别以其他方式选择字段)并使用.hide()方法隐藏它们。或者,您可以通过将visibility设置为hidden来隐藏css中的必要字段。最后,您应该做的唯一事情是在.js文件中写一个条件来检查是否选中了某个必填字段或选择了哪个选项,并使用.show()方法显示一些可选的隐藏字段。想象一下,你有一个id =&#34; mycheckbox&#34;:

    的复选框
    <script type="text/javascript">
        if (document.getElementById('mycheckbox').checked) {
            document.getElementById('someotherfield').show();
        }
    </script>
    
  5. 当然,还有其他方法可以制作动态表格。