deffunc(val):"""
校验输入文本长度
:param val: validators传入待校验的值
:return:
"""if len(val) < 15:
raise ValidationError('内容必须大于15字!')
================================================
# 在当前页面展示所有问题
questions = models.Question.objects.filter(questionnaire__id=qid)
# 利用type构造一个Form组件类
field_dict = {}
for quiz in questions:
for quiz_type in quiz.type.all():
if quiz_type.name == '评分':
field_dict['%s' % quiz.id] = fields.ChoiceField(
label=quiz.name,
error_messages={'required': '必填项'},
widget=widgets.RadioSelect,
choices=[(i, i) for i in range(1, 11)]
)
elif quiz_type.name == '单选':
field_dict['%s' % quiz.id] = fields.ChoiceField(
label=quiz.name,
error_messages={'required': '必填项'},
widget=widgets.RadioSelect,
choices=models.TypeContent.objects.values_list('id', 'name')
)
else:
field_dict['%s' % quiz.id] = fields.CharField(
label=quiz.name,
error_messages={'required': '必填项', 'invalid': '不能少于15个字'},
widget=widgets.Textarea(),
validators=(func,)
)
form = type('TypeForm', (Form,), field_dict)
frontend codes:
<formaction=""novalidatemethod="post">{% csrf_token %}{% for fm in form %}<div><p>{{ fm.label }}{{ fm.errors.0 }}</p>{{ fm }}</div>{% endfor %}<inputtype="submit"value="提交"></form>