Django forms.Choicefield 获得选择 Choice

Django forms.Choicefield get selected Choice

我需要为 if/else 语句获取 forms.Choicefield 的选定值,该语句根据选定值

生成另一个 forms.Choicefield
forms.py:

class ReceiverForm(forms.Form):
receivers = forms.ChoiceField(choices=db_mails(), required=True, label='Receivers')

if db_certs(<- selected value from receivers ChoiceField ->):
    print "cert found"
    encryption = forms.ChoiceField(choices=EncryptionChoiceAll, initial='smime_mail', required=True, label='Encryption')
else:
    print "no cert found"
    encryption = forms.ChoiceField(choices=EncryptionChoiceNoCert, initial='smime_mail', required=True, label='Encryption')

db_mails()db_certs(mail) 正在按预期工作

有什么方法可以实现我在 forms.py 中所需要的,还是我的设计完全错误?

构建表单并指定选择列表时,您无法知道选择了哪个值,因为:

  1. 您创建了一个表单实例 class
  2. 此实例用于创建视图(在 GET 请求中)。用户可以修改选择
  3. 他提交了表格。为此,您创建了一个 class 的实例,其中填充了 POST 值。

所以在您创建 class 时您没有信息。

有可能在一个选择中有动态值,这取决于另一个选择,但这需要在客户端完成,当用户更改选择时:

  • 使用javascript/jquery根据答案更新选项列表。为此,您可以在 HTML 文件中隐藏值,并且 Javascript 将从这些隐藏值更新列表。
  • 如果更新的选择更加动态(例如城镇列表取决于 post 代码),您仍然需要使用 Javascript,但是 Ajax将向服务器发送异步请求以获取列表并更新选项。

有很多教程可以做到这一点,这与 Django 没有直接链接。例如:

https://css-tricks.com/dynamic-dropdowns/