【发布时间】:2015-07-19 16:26:56
【问题描述】:
我有以下 Django 表单:
label = forms.CharField(label="Label",
min_length=2,
max_length=100,
required=True,
widget=forms.TextInput(attrs={'class': 'form-control input-sm'}))
hour = forms.ChoiceField(label="Hour",
choices=choice_hour,
required=True,
widget=forms.Select(attrs={'class': 'form-control input-sm'}))
minute = forms.ChoiceField(label="Minute",
choices=choice_minute,
required=True,
widget=forms.Select(attrs={'class': 'form-control input-sm'}))
period = forms.MultipleChoiceField(label="Day of week",
choices=choice_period,
required=True,
error_messages={'required': 'At least you must select one day'},
widget=forms.CheckboxSelectMultiple(renderer=HorizontalCheckboxRenderer))
snooze = forms.ChoiceField(label="Auto stop",
choices=choice_snooze,
required=True,
widget=forms.Select(attrs={'class': 'form-control input-sm'}))
mode = forms.ChoiceField(label="Mode",
choices=choice_mode,
required=True,
widget=forms.Select(attrs={'class': 'form-control input-sm'}))
if mode == 'music':
webradio = forms.ModelChoiceField(queryset=Webradio.objects.all(),
widget=forms.Select(attrs={'class': 'form-control input-sm'}), required=False)
else:
webradio = forms.ModelChoiceField(queryset=Webradio.objects.all(),
widget=forms.Select(attrs={'class': 'form-control input-sm'}), required=True)
class Meta:
model = Alarmclock
fields = ['label', 'hour', 'minute', 'period', 'snooze', 'mode', 'webradio']
“模式”字段表单允许知道用户想要“收音机”还是“音乐”。
当模式为“音乐”时,webradio 字段可以为空。 但是当 Mode 为 'radio' 时,必须设置 webradio 字段。
如何根据模式更新网络广播字段表单?
我尝试使用 IF 条件,但我认为找不到模式变量,webradio 字段一直是必需的。
谢谢。
【问题讨论】:
-
您必须重写
__init__方法才能做到这一点。这是你的完整课程吗? -
不,我有一些在类顶部初始化的变量/列表/元组(choices_mode 等...)