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