1、问卷的保存按钮
  前端通过ajax把数据发过来后端处理数据,然后返回给前端
2、对问卷做答
  首先用户进行登录,验证
  条件:1、只有本班的学生才能对问卷做答
       2、已经参加过的不能再次访问
      
在前端显示的样式
    显示当前问卷的问题

 分为(单选,多选,打分,文本)(多选未做)
    - 你对近期的工作有哪些意见、。?
      1 2 3 4 5 。。 10
    - 路宁女朋友一些建议?
            文本...
    - 路宁选择帽子颜色?
            A. 绿色    B.翠绿
            C. 墨绿    D.深绿色

问卷的保存按钮涉及到的知识点:
集合的操作:
   

1  s = [1,4,5,8]
2     s2 = [2,4,7,8,6]
3     print(set(s).difference(s2))  #做差集,在s中找和s2不同的元素  {1, 5}
4     print(set(s2).difference(s))  #做差集,在s2中找和s不同的元素  {2, 6, 7}
5     print(set(s)-set(s2))  #这种方式和上面的一样   {1, 5}
6     print(set(s2)^set(s))  #交集   {1, 2, 5, 6, 7}
7     print(set(s2)|set(s))   #并集  {1, 2, 4, 5, 6, 7, 8}

 1 # def outer():
 2 #     a=1
 3 #     def inner():
 4 #         for b in range(10):
 5 #             yield a
 6 #
 7 #     return inner()
 8 # for i in outer():
 9 #     print(i)
10
11
12 # class P:
13 #     pass
14 # print('type(P)---',type(P))
15 # print('P.__name__===',P.__name__)
16 #
17 # f = type('W',(object,),{})
18 # print('type(f)---',type(f))
19 # print('f.__name__===',f.__name__)
20
21
22
23 # x = set('pwf')
24 # y = set('pwf123')
25 #
26 # print(y - x)  # {'2', '3', '1'}
27 # print(x - y)  # set()
28
29 # l = []
30 # d =  {'option_1': '2', 'option_2': '4', 'val_3': '4', 'text_4': '123123123213213213213'}
31 # for k,v in d.items() :
32 #     # print('k',k,'v',v)
33 #     key,qid = k.rsplit('_',1)
34 #     # print(key,qid)
35 #     answer_dict = {'stu_id': id, 'que_id': qid, key: v}
36 #     print(answer_dict)
37 #     l.append(answer_dict)
38 # print(l)



进入正题:

表的设计:

from django.db import models# Create your models here.
class UserInfo(models.Model):'''员工表'''name = models.CharField(max_length=12)password = models.CharField(max_length=32)def __str__(self):return self.name
class ClassList(models.Model):'''班级表'''title = models.CharField(max_length=32,verbose_name='班级名称')def __str__(self):return self.title
class Student(models.Model):'''道友表'''name = models.CharField(max_length=12,verbose_name='道友姓名')password = models.CharField(max_length=24,verbose_name='道友密码')classlist = models.ForeignKey(to=ClassList,verbose_name='道友所在班级')def __str__(self):return self.name
class QuestionNaire(models.Model):'''问卷表'''title = models.CharField(max_length=64,verbose_name='问卷标题')classlist = models.ForeignKey(to=ClassList,verbose_name='答问卷的班级')creator = models.ForeignKey(to=UserInfo,verbose_name='创建问卷的辣个银')def __str__(self):return self.titleclass Question(models.Model):'''问题表'''caption = models.CharField(max_length=64,verbose_name='问题')question_type = ((1,'打分'),(2,'单选'),(3,'评价'),)tp = models.IntegerField(choices=question_type)questionnaire = models.ForeignKey(to=QuestionNaire,verbose_name='该问卷下的问题',default=1)def __str__(self):return self.captionclass Option(models.Model):'''单选题的选项'''option_name = models.CharField(max_length=32,verbose_name='选项名称')score = models.IntegerField(verbose_name='选项对应的分值')question = models.ForeignKey(to=Question,verbose_name='所在的问题')def __str__(self):return self.option_nameclass Answer(models.Model):'''Answer my questions'''val = models.IntegerField(verbose_name='打分项的得分',null=True,blank=True)content = models.CharField(max_length=255,null=True,blank=True,verbose_name='评价')student = models.ForeignKey(to=Student,verbose_name='哪位道友答的题')question = models.ForeignKey(to=Question,verbose_name='答的是哪道题')option = models.ForeignKey(to=Option,verbose_name='单选选项',null=True)def __str__(self):return self.val

form相关:

  这里我们用到form & modelform来操作页面验证。

  需要注意的是: 这里添加问卷时,需要实时显示我们添加的东西哦。

  看代码:

 1 from django.forms import Form       #代表类的基类
 2 from django.forms import fields     #代表字段
 3 from django.forms import widgets    #插件
 4 from django.forms import ModelForm  #代表数据库和form可以一起用
 5 from app01 import models
 6
 7 class QuestionNaire_Form(Form):
 8     '''添加页面的Form验证'''
 9     title = fields.CharField(required=True,max_length=64,
10                                 error_messages={
11                                     'required' : '问卷标题不可以为空!',
12                                     'max_length' : '超过最大长度'
13                                 },
14                                 widget=widgets.Textarea(attrs={'placeholder':'请输入问卷标题','type':'text','style':'width:80%;height:100px;','class':'form-control qn_title'}))
15
16     classlist = fields.ChoiceField(required=True,initial=1,
17                                        error_messages={'required':'请选择班级'},widget=widgets.Select)
18
19     # fields.RegexField()
20     # 实时更新问卷列表
21     def __init__(self,*args,**kwargs):
22         super(QuestionNaire_Form, self).__init__(*args,**kwargs)
23         self.fields['classlist'].choices = models.ClassList.objects.values_list("id","title")
24
25
26
27 class QuestionModelForm(ModelForm):
28     class Meta:
29         model = models.Question
30         fields = ['caption','tp']     #这两行代表  拿到当前表所有的字段
31                                       #这个fields 是按照models里面写的字段格式在前端页面生成相应的东西.
32         widgets={'caption':widgets.Textarea(attrs={'style':'width:600px;height:80px','class':'form-control','placeholder':'请输入问题名称'})}
33 class OptionModelForm(ModelForm):
34     class Meta:
35         model = models.Option
36         fields = ['option_name','score']

然后进入到我们的views页面:

  1 """
  2 思路分析:
  3     拿到前端的数据,像下面这种格式的
  4     如果是json格式发的,注意要在request.body中取值。
  5      ajax_post_list = [
  6                 {
  7                     'id': 2,
  8                     'caption': "你到底爱不爱我??",
  9                     'tp': 1,
 10
 11                 },
 12                 {
 13                     'id': None,
 14                     'caption': "你爱我什么?",
 15                     'tp': 3
 16                 },
 17                 {
 18                     'id': None,
 19                     'caption': "what do u say daring?",
 20                     'tp': 2,
 21                     "options": [
 22                         {'id': 1, 'name': '绿', 'score': 10},
 23                         {'id': 2, 'name': '翠绿', 'score': 8},
 24                     ]
 25                 },
 26             ]
 27     前端的数据和数据库的数据进行比较,
 28         - 前端有后端没有要添加
 29         - 前端没有后端有要删除
 30         - 前端有后端也有要更新
 31 """
 32
 33 def eva_stu(request,class_id,qn_id):
 34
 35     stu_obj = models.Student.objects.filter(id=request.session.get("stu_info").get("stu_id"),classlist_id=class_id).first()
 36
 37     # 1. 先看是否是本班学生
 38     if not stu_obj:
 39         return HttpResponse('您不配啊!!!')
 40     # 2. 看它是否已经答过问卷
 41     ans_obj = models.Answer.objects.filter(student_id=stu_obj.id,question__questionnaire_id=qn_id).count()
 42     if ans_obj:
 43         return HttpResponse('别闹! 您已经答过了啊')
 44     # 3. 拿到所有的问题并显示
 45     from django.forms import Form,fields,widgets
 46     que_list = models.Question.objects.filter(questionnaire_id=qn_id).all()
 47     field_dict = {}
 48     for que in que_list:
 49         if que.tp == 1: # 打分用chioce
 50             field_dict['val_%s' % que.id] = fields.ChoiceField(
 51                 label = que.caption,
 52                 required=True,
 53                 error_messages={'required' : '不能为空哦'},
 54                 widget=widgets.RadioSelect,
 55                 choices=[ (i,i) for i in range(1,11) if i ]
 56             )
 57         elif que.tp == 2 : # 单选
 58             field_dict['option_%s' % que.id] = fields.ChoiceField(
 59                 required=True,
 60                 label = que.caption,
 61                 error_messages={'required':'必选'},
 62                 choices = models.Option.objects.filter(question_id=que.id).values_list('id','option_name'), #为什么改成values_list就可以显示选项
 63                 widget = widgets.RadioSelect
 64             )
 65         else :
 66             field_dict['text_%s' % que.id] = fields.CharField(
 67                 required=True,
 68                 label = que.caption,
 69                 widget = widgets.Textarea,
 70                 validators=[func,]
 71             )
 72     # print("field_dict",field_dict)
 73     # 创建类,并实例化
 74     # print('field_dict======',field_dict)
 75     MyAnswerForm = type('MyAnswerForm', (Form,),field_dict)
 76     if request.method == 'GET':
 77         form  = MyAnswerForm()
 78         return render(request,'eva_stu.html',{'form':form})
 79     else:
 80         form = MyAnswerForm(request.POST)
 81         if form.is_valid():
 82             print(form.cleaned_data)
 83             # {'option_1': '2', 'option_2': '4', 'val_3': '4', 'text_4': '123123123213213213213'}
 84             l = []
 85             for key,v in form.cleaned_data.items():
 86                 k,qid = key.rsplit('_',1)
 87                 answer_dict = {'student_id':stu_obj.id,'question_id':qid,k:v}
 88                 print(answer_dict)
 89                 # l1 = l.append(answer_dict)
 90                 l.append(models.Answer(**answer_dict))
 91                 print(77777)
 92                 # models.Answer.objects.bulk_create()
 93             return HttpResponse('ok')
 94         return render(request,'eva_stu.html',{'form':form})
 95
 96
 97 # 自定义form验证
 98 from django.core.exceptions import ValidationError
 99 def func(val):
100     if len(val) < 15 :
101         raise ValidationError(' duan duan duan ')

显示问卷内容并且拿到提交后的问卷答案

end...

转载于:https://www.cnblogs.com/ugfly/p/8215384.html

Django_调查问卷相关推荐

  1. 计算机应用基础问卷答题,计算机应用基础调查问卷

    <计算机应用基础调查问卷>由会员分享,可在线阅读,更多相关<计算机应用基础调查问卷(2页珍藏版)>请在人人文库网上搜索. 1.计算机应用基础调查问卷(多项选择)1. 你是否对计 ...

  2. 使用Javaweb实现在线调查问卷系统

    作者主页:编程指南针 简介:Java领域优质创作者.CSDN博客专家  Java项目.简历模板.学习资料.面试题库.技术互助 文末获取源码 项目编号:BS-PT-014 开发技术: jsp/servl ...

  3. JSP实现在线调查问卷系统

    项目编号:BS-PT-014 开发技术: jsp/servlet   前端技术:jquery+layui 开发工具:IDEA/Eclipse 数据库:MYSQL5 功能介绍: 在线调查问卷系统:实现了 ...

  4. 调查问卷_员工满意度调查问卷

    亲爱的员工伙伴: 在公司"XXXXXX"的经营环境里,每一位员工都是公司的内部顾客,公司为了更能让您满意,并藉此完善公司各方面管理,请您填写一份满意度问卷,为公司管理和发展赐予您的 ...

  5. SAP CRM调查问卷的评分和图表显示功能介绍

    SAP CRM里我们使用事务码CRM_SURVEY_SUITE创建一个调查问卷(Survey): 其中调查问卷的问题和答案均可分配权值(Rate),最后该问卷总的分数等于每个问题的权值乘以客户选择答案 ...

  6. wxpython问卷调查界面_调查问卷使用说明书,问卷就要这么设计!

    原标题:调查问卷使用说明书,问卷就要这么设计! 提到调查问卷,不知它在大家心里的地位如何?其实我们工作中,需要用到它的场景还很多:比如推出一款新产品,我们会做一个市场调研,探探市场:对已运营中的产品进 ...

  7. 单选选择才可以提交_第二篇:DJANGO开发产品选择表amp;调查问卷

    锅大虾:第一篇:DJANGO开发产品选择表&调查问卷​zhuanlan.zhihu.com 三.调查问卷部分 前端实现效果:首页 首页效果图 需求: 1.单项.多项选择,并且随意增加" ...

  8. 公众号质量改进调查问卷

    自2018年2月7日以来,「AI有道」公众号已经发布了共70余篇原创文章.文章内容涉及机器学习基石.机器学习技法.神经网络DNN.卷积神经网络CNN.循环神经网络RNN等.公众号的定位一直是将本人在A ...

  9. SAP CRM Survey调查问卷的存储模型

    数据库表CRM_SVY_DB_SVS,通过如下的函数CRM_SVY_DB_SVS_CREATE插入: 可以通过指定的创建者和创建时间很容易查找到特定的Survey: 调查问卷的答案明细以XML的格式存 ...

最新文章

  1. 【职场】面试中最难回答频率最高的70个问题
  2. POJ 1765 November Rain
  3. linspace--创建线性等分向量
  4. 蚂蚁御术:我的前端十年成长之路
  5. SPOJ - TOURS Travelling tours(最小费用最大流)
  6. 真实世界的 TCP HOL blocking
  7. java servlet练习测试
  8. java 16进制整数,Java将整数转换为十六进制整数
  9. 基于OpenCV的计算机视觉入门(1)图片操作入门
  10. 大数据中数据挖掘的基本步骤
  11. fiddler监控手机请求
  12. Java编程:哈希表
  13. Win7英文版安装中文语言包过程及方法总结
  14. 调整计算机硬盘大小,详细教您怎么调整硬盘分区
  15. 如何群发邮件?教你发邮件时文件怎么命名、如何设置邮件格式,一文解决你的疑惑
  16. 贪心算法基础之活动时间安排(一)安排 51nod 贪心教程
  17. Coinversation 的选择!一文了解 Polkadot 生态中的智能合约
  18. 水流(water)(BFS)(DFS)
  19. 飞秋下载2010正式版 飞秋下载
  20. 操作系统面试题(十二):逻辑地址和物理地址

热门文章

  1. pandas 模块学习
  2. SVN:服务器资源删掉,本地添加时和删掉的名字同名出现One or more files are in a conflicted state....
  3. Windows 8.1内置微软五笔输入法
  4. webview页面和壳通信的库(精简版)
  5. act转MP3格式工具
  6. mysql--常用基础命令
  7. TCP/IP网络的一些问题(路由/协议/linux的实现)
  8. python的数字转汉字金额的不完善代码
  9. SQLSERVER执行计划详解
  10. Jquery zTree实例