用type动态创建Form
type时所有元类的父亲
object是type(object的类型是type),type也是object(type继承自object)
>>> isinstance(object, type)
True
>>> isinstance(type, object)
True
在python中一切皆object,所有对象都是从object继承而来的,type也是object,而object的type是type
>>> type.__base__
<type 'object'>
>>> type(object)
<type 'type'> 、type是一切type的类型
、object是所有对象的基类,type也继承自object
、object的type是type 去掉object所有对象都不能用了,而去掉type,所有对象还是可以正常运作的,只是没有一个东西标识他的类型了
def score(request, class_id, qn_id):
"""
:param request:
:param class_id: 班级ID
:param qn_id: 问卷ID
:return:
"""
student_id = request.session['student_info']['id']
# . 当前登录用户是否是要评论的班级的学生
ct1 = models.Student.objects.filter(id=student_id, cls_id=class_id).count()
if not ct1:
return HttpResponse('你只能评论自己班级的问卷,是不是想转班?') # . 你是否已经提交过当前问卷答案
ct2 = models.Answer.objects.filter(stu_id=student_id, question__naire_id=qn_id).count()
if ct2:
return HttpResponse('你已经参与过调查,无法再次进行') # . 展示当前问卷下的所有问题
# question_list = models.Question.objects.filter(naire_id=qn_id) from django.forms import Form
from django.forms import fields
from django.forms import widgets # # 类:方式一
# class TestForm(Form):
# tp1 = fields.ChoiceField(label='路宁傻不傻?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect)
# tp2 = fields.ChoiceField(label='路宁傻不傻?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect)
# tp3 = fields.CharField(label='对路宁的建议?',widget=widgets.Textarea)
# tp4 = fields.ChoiceField(label='路宁帽子颜色?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect)
#
# # 类:方式二
# MyTestForm = type("MyTestForm",(Form,),{
# 'tp1': fields.ChoiceField(label='路宁傻不傻?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect),
# 'tp2': fields.ChoiceField(label='路宁傻不傻?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect),
# 'tp3': fields.CharField(label='对路宁的建议?',widget=widgets.Textarea),
# 'tp4': fields.ChoiceField(label='路宁帽子颜色?',choices=[ (i,i) for i in range(,)],widget=widgets.RadioSelect),
# })
# return render(request,'score.html',{'question_list':question_list,'form':MyTestForm()})
question_list = models.Question.objects.filter(naire_id=qn_id)
field_dict = {}
for que in question_list:
if que.tp == :
field_dict['val_%s' % que.id] = fields.ChoiceField(
label=que.caption,
error_messages={'required':'必填'},
widget=widgets.RadioSelect,
choices=[(i, i) for i in range(, )]
)
elif que.tp == :
field_dict['option_id_%s' % que.id] = fields.ChoiceField(
label=que.caption,
widget=widgets.RadioSelect,
choices=models.Option.objects.filter(
qs_id=que.id).values_list('id', 'name'))
else:
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
# field_dict['x_%s' % que.id] = fields.CharField(
# label=que.caption, widget=widgets.Textarea,validators=[RegexValidator(regex=""),])
field_dict['content_%s' % que.id] = fields.CharField(
label=que.caption, widget=widgets.Textarea, validators=[func, ])
# 类:方式二
MyTestForm = type("MyTestForm", (Form,), field_dict) if request.method == 'GET':
form = MyTestForm()
return render(request, 'score.html', {'question_list': question_list, 'form': form})
else:
# 15字验证
# 不允许为空
form = MyTestForm(request.POST)
if form.is_valid():
print(form.cleaned_data)
# {'x_2': '', 'x_9': 'sdfasdfasdfasdfasdfasdfasdf', 'x_10': ''}
objs = []
for key,v in form.cleaned_data.items():
k,qid = key.rsplit('_',)
answer_dict = {'stu_id':student_id,'question_id':qid,k:v}
objs.append(models.Answer(**answer_dict))
models.Answer.objects.bulk_create(objs)
return HttpResponse('感谢您的参与!!!') return render(request, 'score.html', {'question_list': question_list, 'form': form})
用type动态创建Form的更多相关文章
- js动态创建Form表单并提交
javascript动态创建Form表单和表单项,然后提交表单请求,最后删除表单,代码片段如下(Firefox测试通过): var dlform = document.createElement('f ...
- 使用python type动态创建类
使用python type动态创建类 X = type('X', (object,), dict(a=1)) # 产生一个新的类型 X 和下列方法class X(object): a = 1效 ...
- type动态创建类
在一些特定场合,需要动态创建类,比如创建表单,就会用到type动态创建类,举个例子: class Person(object): def __init__(self,name,age): self.n ...
- jQuery动态创建form表单并提交到后台(携带一定的数据进行页面跳转)
今天遇到这么一个需求,携带一个编号一个名字跳转到另一个JSP页面,直接页面跳转(get携带数据)的话不太安全,于是想到到后台转发一下. 第一种:直接以表单提交方式的进行 JS代码: var form ...
- [Python]利用type()动态创建类
Python作为动态语言,可以动态地创建函数和类定义.比如说定义一个Hello类,就写一个hello.py模块: #! /usr/bin/env python #coding=utf-8 class ...
- jquery动态创建form并提交到.ashx文件处理
有时候在写web 应用的时候,需要临时动态构造一个form 并提交,form 里面的参数以及action,以及是post请求还是get请求,甚至form 的样式都是可以指定的,用原生的java ...
- jquery动态创建form表单
function exportExcel() { var merchantName = $('#merchantName').val(); var merchantNo = $('#merchantN ...
- 动态创建form 完成form 提交
document.body.appendChild(jForm) won't work because jForm is not a dom element, it is a jQuery objec ...
- 使用jquery 动态创建form 并提交
$(document).ready(function(){ $("a.delete").click(function(event){ action = this ...
随机推荐
- 005_关于HTTP协议中的保持连接
缘起 中午在群里讨论,用ab测试 一台只提供静态文件服务, 不与其他任何系统交互的时候,为什么也会产生大量的TIME WAIT状态的. 首先,我们可以简单的理解,在TCP连接的两端,谁主动断开连接(先 ...
- 通达OA系统优化-对mysql数据库减肥
OA系统冗余数据过多,访问效率受到影响,现需要对历史数据进行一次清理,以提高OA访问速度 大的数据主要体现在流程上,流程数据主要放在flow_run,flow_run_data,flow_run_pr ...
- jquery学习集合
跳转网页:$(location).attr('href', '/index');
- S5PV210 PWM定时器
第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0.1.2.3有PWM功能,定时器4没有输出引脚.PWM定时器使用PCLK_PSYS作为时钟源,相关知识可 ...
- ThreadLocal和线程同步机制对比
共同点: ThreadLocal和线程同步机制都是为了解决多线程中相同变量的访问冲突问题. 区别: 在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量. 这时该变量是多个线程共享的,使用同 ...
- C#面向对象(基础知识)
面向对象:就是CLASS,class就是用户自定义类型: class:用户自定义引用类型:三大特点:封装.继承.多态: 解决方案中右键添加class:class内可以写结构体,枚举,函数: C#中各个 ...
- CentOS配置通过DHCP的方式动态获取IP
修改/etc/sysconfig/network NETWORKING=yes 修改/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBO ...
- C++ code:判断字符串相等
如果两个字符串中0和1的个数分别相等,则称该对字符串为相等. 方法一: 由于string类对于读取文件中子串以及比较都很方便,所以,用string类的对象来逐对存放字串,然后将字串分别排序后对其进行比 ...
- MyEclipse10中启动出现OutOfMemoryError: PermGen space如何解决
一篇关于技术的文档,分享给大家.在MyEclipse中启动程序运行,报错java.lang.OutOfMemoryError: PermGen space应该怎么办?这是eclipse 内存不够的原因 ...
- J 判断二叉树每个结点的权值是否关于根节点完全对称
如果二叉树每个结点的权值关于根节点完全对称 就输出Yes Sample Input 27 //结点1 2 3 //结点1的左孩子是结点2 右孩子是结点32 4 53 6 74 0 05 0 06 0 ...