Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
设计如下类型的调查问卷表:问卷类型包括(打分,建议,选项),先来看看一个简单的问答。
对于上面一个类型的问答,可以知道,一个问卷系统主要包括:问卷,问卷中每个题目,每个题目的答案,以及生成问卷记录。常规设计表如下:
from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
class Survery(models.Model):
"""
问卷
ID name by_class creator
1 第一次班级调查 大一计算机205班 张老师
"""
name = models.CharField(verbose_name="调查问卷名称", max_length=128, unique=True)
by_class = models.ForeignKey("ClassList", verbose_name="问卷调查班级", on_delete=models.SET_NULL)
date = models.DateTimeField(verbose_name="问卷创建日期", auto_now_add=True)
creator = models.ForeignKey("UserInfo", verbose_name="创建者", on_delete=models.SET_NULL)
class SurveryItem(models.Model):
"""
问卷题目
ID survery name date answer_type
1 1(代表上面创建的第一次班级调查) 您最喜欢吃什么水果? xxx-xxx-xx 1
1 1(代表上面创建的第一次班级调查) 您最喜欢看什么书籍? xxx-xxx-xx 2
1 1(代表上面创建的第一次班级调查) 您最喜欢什么英雄人物? xxx-xxx-xx 3
"""
survery = models.ForeignKey('Survery', verbose_name='问卷', on_delete=models.SET_NULL)
name = models.CharField(verbose_name="调查问题", max_length=255)
date = models.DateField(auto_now_add=True)
answer_type_choices = (
(1, "打分(1~10分)"),
(2, "单选"),
(3, "建议"),
)
answer_type = models.IntegerField(verbose_name="问题类型", choices=answer_type_choices, default=1)
class SurveryChoices(models.Model):
"""
问卷选项答案(针对选项类型)
ID item content points
1 2 A 10分
1 2 B 9分
1 2 C 8分
1 2 D 7分
"""
item = models.ForeignKey('SurveryItem', verbose_name='问题', on_delete=models.SET_NULL)
content = models.CharField(verbose_name='内容', max_length=256)
points = models.IntegerField(verbose_name='分值')
class SurveryRecord(models.Model):
"""
问卷记录
ID survery student_name survery_item score single suggestion date
1 1 1 1 10分 null null xxxxx
1 1 1 2 null A null xxxxx
1 1 1 3 null null XXXXX xxxxx
"""
survery = models.ForeignKey('Survery', verbose_name="问卷", on_delete=models.SET_NULL)
student_name = models.ForeignKey('Student', verbose_name="学生姓名", on_delete=models.SET_NULL)
survery_item = models.ForeignKey('SurveryItem', verbose_name="调查项", on_delete=models.SET_NULL)
score = models.IntegerField(verbose_name="评分", blank=True, null=True)
single = models.ForeignKey('SurveryChoices', verbose_name='单选', blank=True, null=True, on_delete=models.SET_NULL)
suggestion = models.TextField(verbose_name="建议", max_length=1024, blank=True, null=True)
date = models.DateTimeField(verbose_name="答题日期", auto_now_add=True)