Django之利用type构造自定义Form组件

来源:互联网 发布:二级access题库软件 编辑:程序博客网 时间:2024/06/06 21:17

backend codes:

def func(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:

<form action="" novalidate method="post">  {% csrf_token %}  {% for fm in form %}    <div>      <p>{{ fm.label }}{{ fm.errors.0 }}</p>      {{ fm }}    </div>  {% endfor %}  <input type="submit" value="提交"></form>

这种可以循环创建form组件字段的形式,前端可以循环取label等!

原创粉丝点击