调查问卷表结构设计及具体实现

一、表结构设计from django.db import models# Create your models here.class UserInfo(models.Model): '''员工表''' username = models.CharField(max_length=64,verbose_name="用户名") password =...
摘要由CSDN通过智能技术生成

一、表结构设计

from django.db import models

# Create your models here.
class UserInfo(models.Model):
    '''员工表'''
    username = models.CharField(max_length=64,verbose_name="用户名")
    password = models.CharField(max_length=32,verbose_name="用户密码")
    def __str__(self):
        return self.username
    class Meta:
        verbose_name_plural="员工表"

class ClassList(models.Model):
    '''班级表'''
    title = models.CharField(max_length=32,verbose_name="班级名")
    def __str__(self):
        return self.title
    class Meta:
        verbose_name_plural = "班级表"

class Student(models.Model):
    '''学生表'''
    name = models.CharField(max_length=32,verbose_name="学生姓名")
    password = models.CharField(max_length=32,verbose_name="学生密码")
    cls = models.ForeignKey(to="ClassList",verbose_name="所属班级")
    def __str__(self):
        return self.name

    class Meta:
        verbose_name_plural = "学生表"
class Questionnaire(models.Model):
    '''问卷表'''
    title = models.CharField(max_length=32,verbose_name="问卷名")
    cls = models.ForeignKey(to="ClassList",verbose_name="问卷班级")
    create_user = models.ForeignKey(to="UserInfo",verbose_name="创建问卷的用户")
    def __str__(self):
        return self.title

    class Meta:
        verbose_name_plural = "问卷表"
class Questions(models.Model):
    '''问卷问题表'''
    caption = models.CharField(max_length=32,verbose_name="问题题目")
    type_choices = (
        (1,"打分"),
        (2,"单选"),
        (3,"评价")
    )
    question_type = models.IntegerField(choices=type_choices,verbose_name="问题类型")
    questionnaire = models.ForeignKey(to="Questionnaire",verbose_name="所属问卷",default=1)
    def __str__(self):
        return self.caption

    class Meta:
        verbose_name_plural = "问卷问题表"
class Answer(models.Model):
    '''问卷回答表'''   #谁什么时候对那个问题作答了
    student = models.ForeignKey(to="Student",verbose_name="所属学生")
    queston = models.ForeignKey(to="Questions",verbose_name="所属问题")
    option = models.ForeignKey(to="Option",null=True,blank=True)
    val = models.IntegerField(null=True,blank=True,verbose_name="数字答案")
    content = models.CharField(max_length=255,null=True,blank=True,verbose_name="文本答案")
    def __str__(self):
        return self.content

    class Meta:
        verbose_name_plural = "问卷回答表"

class Option(models.Model):
    '''问卷单选题的选项表'''
    name = models.CharField(max_length=32,verbose_name="选项名")
    score = models.IntegerField(verbose_name="选项对应的分值")
    question = models.ForeignKey(to="Questions",verbose_name="所属问题")
    def __str__(self):
        return str(self.score)

    class Meta:
        verbose_name_plural = "问卷单选题的选项表"

二、具体实现

urls.py

 1 from django.conf.urls import url
 2 from django.contrib import admin
 3 from app01 import views
 4 urlpatterns = [
 5     url(r'^admin/', admin.site.urls),
 6     url(r'^index/$', views.index),
 7     url(r'^questionedit/(\d+)/$', views.questionedit),
 8     url(r'^questionedit2/(\d+)/$', views.questionedit2),
 9     url(r'^questionsave/(\d+)/$', views.questionsave),
10     url(r'^student_login/$', views.student_login),
11     url(r'^score/(\d+)/(\d+)/$', views.score),
12 ]
urls.py

 

views.py

  1 from django.core.validators import RegexValidator
  2 from django.db.models.aggregates import Count
  3 from django.forms.forms import Form
  4 from django.http.response import JsonResponse
  5 from django.shortcuts import render, HttpResponse,redirect
  6 from app01 import models
  7 from django.forms import ModelForm,fields,widgets
  8 import json
  9 from django.core.exceptions import ValidationError
 10 from django.core.validators import RegexValidator
 11 # Create your views here.
 12 def index(request):
 13     Questionnaire_obj = models.Questionnaire.objects.all()
 14     #查询问卷所属的班级的学生个数
 15     for naire in Questionnaire_obj:
 16         naire.part_num = models.Answer.objects.filter(queston__in=naire.questions_set.all()).values_list('student_id').distinct().count()
 17         print(naire.part_num)
 18     return render(request,"index.html",{
     "Questionnaire_obj":Questionnaire_obj})
 19 
 20 class QuestionForm(ModelForm):
 21     class Meta:
 22         model = models.Questions
 23         fields = ["caption","question_type"]
 24 
 25         error_messages = {
 26             "caption":{
     "required":"不能为空"}
 27         }
 28         widgets ={
 29             "caption":widgets.Textarea(attrs={
     "class": "question","rows":0,"cols":0})
 30         }
 31 
 32 class OptionModelForm(ModelForm):
 33     class Meta:
 34         model = models.Option
 35         fields = ["name","score"]
 36 
 37 def questionedit(request,nid):
 38     # 方式一:
 39     # #查询当前问卷的所有的问题
 40     # que_list = models.Questions.objects.filter(questionnaire_id=nid).all()
 41     # question_list = []
 42     # if not que_list:
 43     #     '''新建的问题,还没有创建问题'''
 44     #     form = QuestionForm()
 45     #     question_list.append(form)
 46     #     return render(request,"questionedit.html",{"question_list":question_list})
 47     # else:
 48     #     '''已经创建了问题的'''
 49     #     for que in que_list:
 50     #         print(que,"que===")
 51     #         form = QuestionForm(instance=que)
 52     #         question_list.append(form)
 53     # return render(request,"questionedit.html",{"question_list":question_list})
 54 
 55     # 方式二:
 56     #查询当前问卷的所有的问题
 57     # def inner():
 58     #     que_list = models.Questions.objects.filter(questionnaire_id=nid).all()
 59     #     if not q
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值