achievement.management.commands.unlock_graduates_credit_achievements 源代码

"""
解锁毕业生 '本科均没有扣除信用分' 成就
"""
from datetime import date, timedelta
import pandas as pd

from django.core.management.base import BaseCommand
from achievement.models import Achievement
from achievement.utils import bulk_add_achievement_record, get_students_without_credit_record


[文档] class Command(BaseCommand): ''' 从excel中导入成就 格式:学号 filepath: excel文件路径 会自动判断是否有扣分记录 ''' help = "解锁毕业生 '本科均没有扣除信用分' 成就"
[文档] def add_arguments(self, parser): parser.add_argument('filepath', type=str)
[文档] def handle(self, *args, **options): # 读取 excel filepath = options['filepath'] full_path = filepath data = None if filepath.endswith('xlsx') or filepath.endswith('xls'): data = pd.read_excel(f'{full_path}', sheet_name=None) elif filepath.endswith('csv'): data = pd.read_csv(f'{full_path}', dtype=object, encoding='utf-8') else: data = pd.read_table(f'{full_path}', dtype=object, encoding='utf-8') if data == None: print('文件格式不正确') return # 默认选取第一个sheet if type(data) == dict: data = data[list(data.keys())[0]] graduate_number = data['学号'].astype(str).tolist() # 读取学号 today = date.today() students = get_students_without_credit_record( today-timedelta(days=365*6), today).filter(username__in=graduate_number) achievement = Achievement.objects.get(name='本科均没有扣除信用分') bulk_add_achievement_record(students, achievement)