我是django和python的新手,目前正在尝试构建一个包含各种选项的表单,以及一个不在列表中的选项的“其他”选项。我想定义选项,以便在选中“other”时,表单仅验证另一个文本框是否包含非空值。
是否有正确的方法来扩展django表单/字段/小部件来实现此目的?搜索google和stackoverflow之后最接近的事情是this example,它提供了扩展创建的代码自定义渲染器,窗口小部件和表单字段,但它基于旧版本的django。
答案 0 :(得分:4)
如果您使用django.forms.ModelForm
呈现表单,则可以在选项字段(clean_[your field name]
)的表单验证中执行此操作。
from django import forms
class YourModelForm(forms.ModelForm):
def clean_your_options(self):
your_options = self.cleaned_data.getlist('your_options')
if 'other' in your_options:
other_text_input = self.cleaned_data.get('other_text_input')
if len(other_text_input) == 0:
raise forms.ValidationError('Other text input must contain value')
return your_options