employees api
This commit is contained in:
@@ -7,13 +7,13 @@ class AcademicYearSerializer(serializers.ModelSerializer):
|
|||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class DepartmentSerializer(serializers.ModelSerializer):
|
class StudyDepartmentSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Department
|
model = Department
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class DepartmentHeadSerializer(serializers.ModelSerializer):
|
class StudyDepartmentHeadSerializer(serializers.ModelSerializer):
|
||||||
head_name = serializers.SerializerMethodField()
|
head_name = serializers.SerializerMethodField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ from django_filters.rest_framework import DjangoFilterBackend
|
|||||||
from .models import AcademicYear, Department, DepartmentHead, Specialty, Group, Student
|
from .models import AcademicYear, Department, DepartmentHead, Specialty, Group, Student
|
||||||
from .serializers import (
|
from .serializers import (
|
||||||
AcademicYearSerializer,
|
AcademicYearSerializer,
|
||||||
DepartmentSerializer,
|
StudyDepartmentSerializer,
|
||||||
DepartmentHeadSerializer,
|
StudyDepartmentHeadSerializer,
|
||||||
SpecialtySerializer,
|
SpecialtySerializer,
|
||||||
GroupSerializer,
|
GroupSerializer,
|
||||||
StudentSerializer,
|
StudentSerializer,
|
||||||
@@ -30,7 +30,7 @@ class AcademicYearViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
class DepartmentViewSet(viewsets.ModelViewSet):
|
class DepartmentViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Department.objects.all()
|
queryset = Department.objects.all()
|
||||||
serializer_class = DepartmentSerializer
|
serializer_class = StudyDepartmentSerializer
|
||||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||||
filterset_class = DepartmentFilter
|
filterset_class = DepartmentFilter
|
||||||
search_fields = ["name"]
|
search_fields = ["name"]
|
||||||
@@ -39,7 +39,7 @@ class DepartmentViewSet(viewsets.ModelViewSet):
|
|||||||
|
|
||||||
class DepartmentHeadViewSet(viewsets.ModelViewSet):
|
class DepartmentHeadViewSet(viewsets.ModelViewSet):
|
||||||
queryset = DepartmentHead.objects.all()
|
queryset = DepartmentHead.objects.all()
|
||||||
serializer_class = DepartmentHeadSerializer
|
serializer_class = StudyDepartmentHeadSerializer
|
||||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||||
filterset_class = DepartmentHeadFilter
|
filterset_class = DepartmentHeadFilter
|
||||||
search_fields = ["department__name", "head__first_name"]
|
search_fields = ["department__name", "head__first_name"]
|
||||||
|
|||||||
12
employees/filters.py
Normal file
12
employees/filters.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import django_filters
|
||||||
|
from .models import Employee
|
||||||
|
|
||||||
|
class EmployeeFilter(django_filters.FilterSet):
|
||||||
|
first_name = django_filters.CharFilter(field_name="account__first_name", lookup_expr="icontains")
|
||||||
|
last_name = django_filters.CharFilter(field_name="account__last_name", lookup_expr="icontains")
|
||||||
|
department_name = django_filters.CharFilter(field_name="department__name", lookup_expr="icontains")
|
||||||
|
position_name = django_filters.CharFilter(field_name="position__name", lookup_expr="icontains")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Employee
|
||||||
|
fields = ["first_name", "last_name", "department_name", "position_name"]
|
||||||
44
employees/serializers.py
Normal file
44
employees/serializers.py
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
from rest_framework import serializers
|
||||||
|
from .models import Position, Department, Employee
|
||||||
|
|
||||||
|
class PositionSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Position
|
||||||
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
|
class DepartmentSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Department
|
||||||
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
|
class EmployeeSerializer(serializers.ModelSerializer):
|
||||||
|
first_name = serializers.CharField(source="account.first_name")
|
||||||
|
last_name = serializers.CharField(source="account.last_name")
|
||||||
|
middle_name = serializers.CharField(source="account.middle_name", allow_null=True)
|
||||||
|
phone = serializers.CharField(source="account.phone", allow_null=True)
|
||||||
|
email = serializers.CharField(source="account.email")
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Employee
|
||||||
|
fields = [
|
||||||
|
"id",
|
||||||
|
"department",
|
||||||
|
"position",
|
||||||
|
"first_name",
|
||||||
|
"last_name",
|
||||||
|
"middle_name",
|
||||||
|
"phone",
|
||||||
|
"email",
|
||||||
|
]
|
||||||
|
|
||||||
|
def update(self, instance, validated_data):
|
||||||
|
account_data = validated_data.pop("account", {})
|
||||||
|
instance.account.first_name = account_data.get("first_name", instance.account.first_name)
|
||||||
|
instance.account.last_name = account_data.get("last_name", instance.account.last_name)
|
||||||
|
instance.account.middle_name = account_data.get("middle_name", instance.account.middle_name)
|
||||||
|
instance.account.phone = account_data.get("phone", instance.account.phone)
|
||||||
|
instance.account.email = account_data.get("email", instance.account.email)
|
||||||
|
instance.account.save()
|
||||||
|
return super().update(instance, validated_data)
|
||||||
12
employees/urls.py
Normal file
12
employees/urls.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from django.urls import path, include
|
||||||
|
from rest_framework.routers import DefaultRouter
|
||||||
|
from .views import PositionViewSet, DepartmentViewSet, EmployeeViewSet
|
||||||
|
|
||||||
|
router = DefaultRouter()
|
||||||
|
router.register(r"positions", PositionViewSet, basename="position")
|
||||||
|
router.register(r"departments", DepartmentViewSet, basename="department")
|
||||||
|
router.register(r"employees", EmployeeViewSet, basename="employee")
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path("", include(router.urls)),
|
||||||
|
]
|
||||||
@@ -1,3 +1,30 @@
|
|||||||
from django.shortcuts import render
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.filters import SearchFilter, OrderingFilter
|
||||||
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from .models import Position, Department, Employee
|
||||||
|
from .serializers import PositionSerializer, DepartmentSerializer, EmployeeSerializer
|
||||||
|
from .filters import EmployeeFilter # Фильтры будут добавлены позже
|
||||||
|
|
||||||
# Create your views here.
|
class PositionViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Position.objects.all()
|
||||||
|
serializer_class = PositionSerializer
|
||||||
|
filter_backends = [SearchFilter, OrderingFilter]
|
||||||
|
search_fields = ["name"]
|
||||||
|
ordering_fields = ["name"]
|
||||||
|
|
||||||
|
|
||||||
|
class DepartmentViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Department.objects.all()
|
||||||
|
serializer_class = DepartmentSerializer
|
||||||
|
filter_backends = [SearchFilter, OrderingFilter]
|
||||||
|
search_fields = ["name"]
|
||||||
|
ordering_fields = ["name"]
|
||||||
|
|
||||||
|
|
||||||
|
class EmployeeViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = Employee.objects.all()
|
||||||
|
serializer_class = EmployeeSerializer
|
||||||
|
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||||
|
filterset_class = EmployeeFilter
|
||||||
|
search_fields = ["account__first_name", "account__last_name", "position__name", "department__name"]
|
||||||
|
ordering_fields = ["department", "position", "account__last_name"]
|
||||||
@@ -39,6 +39,7 @@ schema_view = get_schema_view(
|
|||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
path('api/v1/education/', include("education.urls")),
|
path('api/v1/education/', include("education.urls")),
|
||||||
|
path('api/v1/employees/', include("employees.urls")),
|
||||||
|
|
||||||
path('docs/swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
|
path('docs/swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
|
||||||
path('docs/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
path('docs/swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
|
||||||
|
|||||||
Reference in New Issue
Block a user