Exemple #1
0
def retrieve_rankings(request, ranking_id=""):
    """
    获取所有信息
    :return: json
    """
    if ranking_id == "":
        batches = BatchOfTable.objects.filter(table_type=1).order_by("id")
    elif "search_by_college" in request.GET:  # 此时的ranking_id为college id
        relations = RankingAndCollegeRelation.objects.filter(
            college_id=int(ranking_id))
        batches = []
        no_repeat = {}
        for r in relations:
            if r.ranking.batch.id not in no_repeat:
                no_repeat[r.ranking.batch.id] = 1
                batches.append(r.ranking.batch)
    else:
        _ranking = Table.get_table_by_id(int(ranking_id))
        batches = BatchOfTable.objects.filter(table=_ranking).order_by("id")
    page = request.GET.get("page", 1)
    size = request.GET.get("size", 200)
    content, num_pages = common.with_paginator(batches, int(page), int(size))
    return_dict = format_rankings(content, int(page), int(size))  # 格式化院校信息
    return_dict["num_pages"] = num_pages
    return JsonResponse(return_dict)
Exemple #2
0
def get_ranking(request, ranking_id):
    """

    :return:
    """
    ranking = Table.get_table_by_id(int(ranking_id))
    if request.method == "POST":
        print(request.POST)
        try:
            fields = request.POST.getlist("field_name_cn")
            for _field in fields:
                if not Field.objects.filter(table=ranking,
                                            name_cn=_field).count():
                    Field.objects.create(table=ranking, name_cn=_field)
                else:
                    messages.info(request, "存在重复字段,已忽略")
            messages.success(request, "添加字段成功")
        except Exception as e:
            logger.error(str(e))
            messages.error(request, "添加字段失败")
    fields = Table.get_fields_by_table_id(int(ranking_id)).order_by("id")
    urls = copy.deepcopy(SIDEBAR_URL)
    urls[0]["active"] = True
    return render(request, "backend/ranking/ranking.html", {
        "self": request.user,
        "ranking": ranking,
        "fields": fields,
        "urls": urls
    })
Exemple #3
0
def import_ranking(request, ranking_id):
    """

    :return:
    """
    if request.method == "POST":
        return_dict = {}
        try:
            _file = request.FILES.get("file_upload")  # 上传的文件
            wb = excel_loader.load_excel(_file)  # 读取excel
            head = excel_loader.get_excel_head(wb)
            body = excel_loader.get_excel_body_generator(wb)
            batch = request.POST["extra"]
            _table = Table.get_table_by_id(int(ranking_id))  # 获取表
            _batch = matching_batch(batch, _table)  # 匹配批次,如果已存在批次,抛出错误
            matching_field(_table, head)  # 如果excel中出现未定义的字段,抛出错误
            # 看字段中是否存在“学校名称”或者“学校标识码”
            if "学校标识码" in head:
                cur = head.index("学校标识码")  # 优先记录学校标识码位置
            elif "学校名称" in head:
                cur = head.index("学校名称")  # 记录学校名称位置
            else:
                cur = -1
            # 分别处理每行数据
            length = len(head)
            for record in body:
                data = {}
                for i in range(length):  # 生成json数据,“字段”:数据
                    data[head[i]] = empty_is_empty_str(record[i])
                ranking = Ranking.objects.create(batch=_batch, data=data)
                if cur != -1:  # 字段中存在“学校名称”或者“学校标识码”,则建立与对应学校之间的关系
                    param = record[cur]  # “学校名称”或者“学校标识码”对应字段
                    try:
                        college = College.objects.get(
                            Q(name_cn=param) | Q(id_code=param))  # 找到该学校
                        RankingAndCollegeRelation.objects.create(
                            college=college, ranking=ranking)  # 建立该字段与学校之间的关系
                    except ObjectDoesNotExist:
                        logger.warning(param + "不存在")
            return_dict["success"] = "success"
        except IndexError as e:
            logger.error(str(e))
            return_dict["error"] = "请选择批次"
        except IntegrityError as e:  # 仅处理重复添加错误
            logger.error(str(e))
            return_dict["error"] = "批次重复"
        except Exception as e:
            logger.error(str(e))
            logger.error(traceback.format_exc())
            return_dict["error"] = "出现错误,请检查文件及内容格式"
        finally:
            return JsonResponse(return_dict)
    year = YearSeasonMonth.objects.filter(type=1)
    _ranking = Table.get_table_by_id(int(ranking_id))
    _fields = Table.get_fields_by_table_id(int(ranking_id))
    fields = [str(f.name_cn) for f in _fields]
    urls = copy.deepcopy(SIDEBAR_URL)  # 侧边栏网址
    urls[0]["active"] = True
    return render(
        request, "backend/ranking/import.html", {
            "self": request.user,
            "fields": fields,
            "ranking": _ranking,
            "year": year,
            "urls": urls,
            "file_upload_url":
            "/backend/ranking/import/" + str(ranking_id) + "/"
        })