zyf 03 添加量表 - nuanxin1111/react GitHub Wiki
假设我们现在要添加一套量表,规则已经确定。下面是流程:
1.导入量表数据到数据库
示例:
from django.test import TestCase
import os
import argparse
from datetime import datetime
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nuanxin.settings')
import django
django.setup()
from nuanxin.apps.doctor.models import *
#焦虑自评量表(SAS)
option_list = [
'没有或很少时间',
'小部分时间',
'相当多时间',
'绝大部分或全部时间'
]
ques_list = [
'1.我觉得比平时容易紧张或着急',
'2.我无缘无故在感到害怕',
'3.我容易心里烦乱或感到惊恐',
'4.我觉得我可能将要发疯',
'5.我觉得一切都很好,也不会发生什么不幸',
'6.我手脚发抖打颤',
'7.我因为头疼、颈痛和背痛而苦恼',
'8.我觉得容易衰弱和疲乏',
'9.我觉得心平气和,并且容易安静坐着',
'10.我觉得心跳得很快',
'11.我因为一阵阵头晕而苦恼',
'12.我有晕倒发作,或觉得要晕倒似的',
'13.我吸气呼气都感到很容易',
'14.我的手脚麻木和刺痛',
'15.我因为胃痛和消化不良而苦恼',
'16.我常常要小便',
'17.我的手脚常常是干燥温暖的',
'18.我脸红发热',
'19.我容易入睡并且一夜睡得很好',
'20.我做恶梦'
]
#添加量表
test = Test()
test.testName = '焦虑自评量表(SAS)' #量表测试题目
test.testInfo = '焦虑自评量表(SAS)' #量表信息
test.testImg = 'SAS.jpg'
test.gradingLevels = '25|50|60|70|101'
test.evaluations = '正常|轻度焦虑|中度焦虑|重度焦虑'
test.department_id = 1
test.save()
for i in range(20):
question = Question()
question.test = test
question.content = ques_list[i]
question.save()
for j in range(4):
option = Option()
option.question = question
option.optionContent = option_list[j]
option.assignedNum = j+1
option.save()
在项目根目录下面运行脚本,把这些数据导入数据库。
2.编写规则
每套量表的规则是不一样的,如果显示的形式是一样的,那么不需要动views,在class_libs/scorealg.py里面添加规则.
def calc_score(testname, GradingLevels, Evaluations, Numlist):
if(testname == u"阿森斯失眠量表"):
result=method1(GradingLevels, Evaluations, Numlist)
elif(testname == u"匹茲堡睡眠"):
result=method2(GradingLevels, Evaluations, Numlist)
elif(testname == u"焦虑自评量表(SAS)") or (testname == u"抑郁自评量表(SDS)"):
result=calc_sas_sds(GradingLevels, Evaluations, Numlist)
return result
在这里我们判断判断的名字,然后调用不同的计算方法:
def calc_sas_sds(GradingLevels, Evaluations, Numlist):
#标准分
score = int(sum(Numlist)*1.25)
result = {'score':score}
result['subgrade'] = Numlist
size = len(Evaluations)
for i in range(1, size+1):
if (score < int(GradingLevels[i])) and (score >= int(GradingLevels[i-1])):
result['coments']=Evaluations[i-1]
result['memo'] = sas_sds_memo[i-1]
return result
一般这样就可以了,但是有时候显示的最终结果的页面可能有些不一样,比如我最近做的这个显示的方式是:
25-49
50-59
60-69
70-100
而原来的量表显示方式是:
0-4
4-7
7-24
虽然差别不大,但是这个时候展示的就不能共用一套规则了,这个方法名叫scorealg.py中的standards,于是在scorealg中另写一个显示规则,然后在views中做判断:views.py
140 if (testid == u'4') or (testid == u'5'):
141 standards = scorealg.new_standards(gradingLevels, evaluations)
142 else:
143 standards = scorealg.standards(gradingLevels, evaluations)
144 result['standards'] = standards