2016-02-23 65 views
0

我想在我的Django模型表單中添加一些條件邏輯,它比我預期的要困難得多。我想要做的是:如果用戶選擇選項A,我想再顯示一個問題,如果他們選擇選項B,我想要顯示另一個問題。我應該如何在Django表單中實現條件邏輯?

我發現this answer - 這正是我想要的,它說,首先讓字段具有可選值(即不要求),然後使用Javascript來隱藏字段,根據邏輯。但它沒有解釋如何。

我想我可以找出JS位,但我想了解的是如何以及在哪裏添加這個。我會假設在forms.py中,在一個小部件attrs也許? 如果可能的話,我會喜歡實現示例。提前感謝!

+0

你可以看看[django-dynamic-forms](https://github.com/MarkusH/django-dynamic-forms)。 – knbk

+0

Javascript進入html頁面模板。 –

回答

1

正如您已經提到的那樣,最簡單的方法是創建一個包含所有字段的表單(要求爲&可選),並使其中的某些表單不可見,直到您希望它們顯示爲止(通過選擇某些例如在其他領域的選項)。 要做到這一點,你應該:

  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 = 「mycheckbox」 複選框:

    <script type="text/javascript"> 
        if (document.getElementById('mycheckbox').checked) { 
         document.getElementById('someotherfield').show(); 
        } 
    </script> 
    

當然,還有其他的辦法,使動態表單。

+0

謝謝,chem1st。我已經完成了步驟1,步驟2和步驟3.我如何給這些字段添加id?如果CharField有兩種選擇,比如說「是」和「否」,我該如何設置邏輯「如果答案是肯定的,這樣做」? – Mangoshaker

+0

Django表單已經有內置的ID - [檢查出來](https://docs.djangoproject.com/en/1.9/topics/forms/#building-a-form-in-django)。 – chem1st

+0

問題是我沒有意識到django表單有內置的ID,而我一直在想如何讓JS工作!再次感謝! – Mangoshaker