import json from django.http import JsonResponse from django.views import View from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.shortcuts import render, get_object_or_404 from django.views.decorators.csrf import csrf_exempt from rest_framework.decorators import api_view from rest_framework.response import Response from rest_framework import status from .models import PrimaryDepartment, SecondaryDepartment from .serializers import PrimaryDepartmentSerializer, SecondaryDepartmentSerializer def entity_information_registration(request): return render(request, 'org_mgnt/entity_information_registration.html') def primary_departments(request): return render(request, 'org_mgnt/primary_departments.html') def secondary_departments(request): return render(request, 'org_mgnt/secondary_departments.html') @api_view(['POST']) def create_primary_department(request): if request.method == 'POST': serializer = PrimaryDepartmentSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class PrimaryDepartmentListView(View): def get(self, request): # 获取查询参数 department_name = request.GET.get('department_name', '') # 过滤查询集 queryset = PrimaryDepartment.objects.all() if department_name: queryset = queryset.filter(department_name=department_name) # 分页 page = request.GET.get('page', 1) paginator = Paginator(queryset, 10) # 每页10条记录 try: departments = paginator.page(page) except PageNotAnInteger: departments = paginator.page(1) except EmptyPage: departments = paginator.page(paginator.num_pages) # 序列化数据 department_list = [{ 'primary_department_id': department.primary_department_id, 'department_name': department.department_name, 'description': department.description, } for department in departments] pagination_html = render(request, 'pagination_ps.html', { 'page': departments.number, 'pages': paginator.num_pages, 'has_next': departments.has_next(), 'has_previous': departments.has_previous(), 'total': paginator.count, 'start_index': departments.start_index(), 'end_index': departments.end_index(), 'range': range(1, paginator.num_pages + 1) }).content.decode('utf-8') # 返回JSON响应 return JsonResponse({ 'departments': department_list, 'pagination_html': pagination_html, }) @api_view(['PUT']) def update_primary_department(request, pk): try: department = PrimaryDepartment.objects.get(pk=pk) except PrimaryDepartment.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'PUT': serializer = PrimaryDepartmentSerializer(department, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @api_view(['DELETE']) def delete_primary_department(request, pk): try: department = PrimaryDepartment.objects.get(pk=pk) except PrimaryDepartment.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'DELETE': department.delete() return Response(status=status.HTTP_204_NO_CONTENT) # 二级部门 def get_secondary_department(request): department_name = request.GET.get('department_name', '') page_number = request.GET.get('page', 1) if department_name: departments = SecondaryDepartment.objects.filter(name__icontains=department_name) else: departments = SecondaryDepartment.objects.all() paginator = Paginator(departments, 10) page_obj = paginator.get_page(page_number) departments_data = [ { "secondary_department_id": department.secondary_department_id, "primary_department_name": department.primary_department.department_name, "secondary_department_name": department.secondary_department_name, "description": department.description, } for department in page_obj ] response_data = { "departments": departments_data, "pagination_html": render(request, "pagination_ps.html", {"page_obj": page_obj}).content.decode() } return JsonResponse(response_data) @csrf_exempt def create_secondary_department(request): if request.method == "POST": data = json.loads(request.body) primary_department_id = data.get('primary_department_id') secondary_department_name = data.get('secondary_department_name') description = data.get('description') SecondaryDepartment.objects.create( primary_department_id=primary_department_id, secondary_department_name=secondary_department_name, description=description, ) return JsonResponse({"message": "Secondary department created successfully"}, status=201) def update_secondary_department(request, department_id): if request.method == "PUT": data = json.loads(request.body) primary_department_name = data.get('primary_department_name') secondary_department_name = data.get('secondary_department_name') description = data.get('description') try: department = SecondaryDepartment.objects.get(id=department_id) department.primary_department = PrimaryDepartment.objects.get(name=primary_department_name) department.name = secondary_department_name department.description = description department.save() return JsonResponse({"message": "Secondary department updated successfully"}, status=200) except SecondaryDepartment.DoesNotExist: return JsonResponse({"error": "Secondary department not found"}, status=404) def delete_secondary_department(request, department_id): if request.method == "DELETE": try: department = SecondaryDepartment.objects.get(id=department_id) department.delete() return JsonResponse({"message": "Secondary department deleted successfully"}, status=200) except SecondaryDepartment.DoesNotExist: return JsonResponse({"error": "Secondary department not found"}, status=404)