XH_Digital_Management/common/views.py

93 lines
3.7 KiB
Python
Raw Normal View History

import json
2024-06-17 13:09:17 +08:00
import uuid
2024-05-30 17:06:23 +08:00
2024-06-02 01:48:07 +08:00
from django.apps import apps
2024-06-02 21:30:17 +08:00
from django.core.exceptions import ValidationError
2024-06-14 16:47:43 +08:00
from django.shortcuts import render
2024-06-01 05:05:29 +08:00
2024-06-01 01:40:12 +08:00
from django.contrib.auth.decorators import login_required
2024-06-19 02:03:59 +08:00
from django.http import JsonResponse, HttpResponse
2024-06-14 01:48:24 +08:00
from django.views.decorators.csrf import csrf_protect
2024-06-01 00:57:14 +08:00
2024-06-17 10:23:24 +08:00
from application.fac_mgnt.models import InvoiceRecord
2024-06-19 02:03:59 +08:00
from application.org_mgnt.models import SecondaryDepartment, PrimaryDepartment
2024-06-17 10:23:24 +08:00
from application.pjt_mgnt.models import ProjectLedger
2024-06-01 00:57:14 +08:00
2024-06-14 16:47:43 +08:00
def error_page(request):
return render(request, 'error_page.html')
2024-06-02 21:47:43 +08:00
@csrf_protect
2024-06-02 21:30:17 +08:00
@login_required
2024-06-02 01:48:07 +08:00
def save_excel_table_data(request):
if request.method == 'POST':
try:
data = json.loads(request.body)
2024-06-06 23:46:12 +08:00
model_config = data.get('model_config')
2024-06-02 21:30:17 +08:00
table_data = data.get('table_data')
2024-06-06 23:46:12 +08:00
if not model_config or not table_data:
2024-06-02 21:30:17 +08:00
return JsonResponse({'error': '缺少必要的参数'}, status=400)
2024-06-02 01:48:07 +08:00
2024-06-06 23:46:12 +08:00
# 分割 model_config 以获取 app_label 和 model_name
try:
app_label, model_name = model_config.split('.')
Model = apps.get_model(app_label, model_name)
except (ValueError, LookupError):
return JsonResponse({'error': '无效的 model_config'}, status=400)
2024-06-02 01:48:07 +08:00
2024-06-06 23:46:12 +08:00
instances = []
2024-06-02 01:48:07 +08:00
for row_data in table_data:
instance_data = {}
for field_name, value in row_data.items():
field = Model._meta.get_field(field_name)
if field.is_relation:
related_model = field.related_model
related_field_name_list = related_model._meta.fields
for related_field_name in related_field_name_list:
try:
related_instance = related_model.objects.get(**{related_field_name.name: value})
value = related_instance
instance_data[field_name] = value
break
except Exception:
continue
else:
instance_data[field_name] = value
instance = Model(**instance_data)
2024-06-02 21:30:17 +08:00
try:
instance.full_clean()
2024-06-06 23:46:12 +08:00
instances.append(instance)
2024-06-02 21:30:17 +08:00
except ValidationError as e:
return JsonResponse({'error': f'数据校验错误: {e.message_dict}'}, status=400)
2024-06-06 23:46:12 +08:00
# 批量保存数据
Model.objects.bulk_create(instances)
2024-06-02 01:48:07 +08:00
return JsonResponse({'success': '数据保存成功'}, status=201)
2024-06-02 21:30:17 +08:00
except json.JSONDecodeError:
return JsonResponse({'error': '无效的JSON数据'}, status=400)
2024-06-02 01:48:07 +08:00
except Exception as e:
return JsonResponse({'error': f'保存数据时出错: {str(e)}'}, status=500)
return JsonResponse({'error': '请求错误'}, status=400)
@login_required
def load_secondary_departments(request):
2024-06-19 02:03:59 +08:00
try:
primary_department_name = request.GET.get('primary_department')
primary_department = PrimaryDepartment.objects.get(department_name=primary_department_name)
secondary_departments = SecondaryDepartment.objects.filter(primary_department_id=primary_department.primary_department_id).order_by('secondary_department_name')
# 创建 HTML 字符串
options = '<option value="">选择二级部门</option>'
for dept in secondary_departments:
options += f'<option value="{dept.secondary_department_name}">{dept.secondary_department_name}</option>'
2024-06-19 02:03:59 +08:00
return HttpResponse(options)
except Exception as e:
return HttpResponse('')
2024-06-17 10:23:24 +08:00