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 中所需要的,还是我的设计完全错误?
构建表单并指定选择列表时,您无法知道选择了哪个值,因为:
- 您创建了一个表单实例 class
- 此实例用于创建视图(在 GET 请求中)。用户可以修改选择
- 他提交了表格。为此,您创建了一个 class 的实例,其中填充了 POST 值。
所以在您创建 class 时您没有信息。
有可能在一个选择中有动态值,这取决于另一个选择,但这需要在客户端完成,当用户更改选择时:
- 使用javascript/jquery根据答案更新选项列表。为此,您可以在 HTML 文件中隐藏值,并且 Javascript 将从这些隐藏值更新列表。
- 如果更新的选择更加动态(例如城镇列表取决于 post 代码),您仍然需要使用 Javascript,但是 Ajax将向服务器发送异步请求以获取列表并更新选项。
有很多教程可以做到这一点,这与 Django 没有直接链接。例如:
我需要为 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 中所需要的,还是我的设计完全错误?
构建表单并指定选择列表时,您无法知道选择了哪个值,因为:
- 您创建了一个表单实例 class
- 此实例用于创建视图(在 GET 请求中)。用户可以修改选择
- 他提交了表格。为此,您创建了一个 class 的实例,其中填充了 POST 值。
所以在您创建 class 时您没有信息。
有可能在一个选择中有动态值,这取决于另一个选择,但这需要在客户端完成,当用户更改选择时:
- 使用javascript/jquery根据答案更新选项列表。为此,您可以在 HTML 文件中隐藏值,并且 Javascript 将从这些隐藏值更新列表。
- 如果更新的选择更加动态(例如城镇列表取决于 post 代码),您仍然需要使用 Javascript,但是 Ajax将向服务器发送异步请求以获取列表并更新选项。
有很多教程可以做到这一点,这与 Django 没有直接链接。例如: