common api
This commit is contained in:
25
outreach/filters.py
Normal file
25
outreach/filters.py
Normal file
@@ -0,0 +1,25 @@
|
||||
import django_filters
|
||||
from .models import School, SchoolResponsibility
|
||||
|
||||
class SchoolFilter(django_filters.FilterSet):
|
||||
name = django_filters.CharFilter(lookup_expr="icontains")
|
||||
address = django_filters.CharFilter(lookup_expr="icontains")
|
||||
institution_type_name = django_filters.CharFilter(
|
||||
field_name="institution_type__name", lookup_expr="icontains"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = School
|
||||
fields = ["name", "address", "institution_type_name"]
|
||||
|
||||
|
||||
class SchoolResponsibilityFilter(django_filters.FilterSet):
|
||||
academic_year = django_filters.CharFilter(field_name="academic_year__year", lookup_expr="exact")
|
||||
school_name = django_filters.CharFilter(field_name="school__name", lookup_expr="icontains")
|
||||
responsible_name = django_filters.CharFilter(
|
||||
field_name="responsible__account__first_name", lookup_expr="icontains"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = SchoolResponsibility
|
||||
fields = ["academic_year", "school_name", "responsible_name"]
|
||||
67
outreach/serializers.py
Normal file
67
outreach/serializers.py
Normal file
@@ -0,0 +1,67 @@
|
||||
from rest_framework import serializers
|
||||
from .models import (
|
||||
InstitutionType,
|
||||
Representative,
|
||||
School,
|
||||
Partner,
|
||||
PartnerRepresentative,
|
||||
SchoolResponsibility,
|
||||
)
|
||||
|
||||
class InstitutionTypeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = InstitutionType
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class RepresentativeSerializer(serializers.ModelSerializer):
|
||||
full_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Representative
|
||||
fields = ["id", "first_name", "last_name", "middle_name", "phone", "email", "position", "full_name"]
|
||||
|
||||
def get_full_name(self, obj):
|
||||
return f"{obj.first_name} {obj.last_name}" + (f" {obj.middle_name}" if obj.middle_name else "")
|
||||
|
||||
|
||||
class SchoolSerializer(serializers.ModelSerializer):
|
||||
director_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = School
|
||||
fields = ["id", "director", "institution_type", "name", "address", "director_name"]
|
||||
|
||||
def get_director_name(self, obj):
|
||||
if obj.director:
|
||||
return f"{obj.director.first_name} {obj.director.last_name}"
|
||||
return None
|
||||
|
||||
|
||||
class PartnerSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Partner
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class PartnerRepresentativeSerializer(serializers.ModelSerializer):
|
||||
representative_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = PartnerRepresentative
|
||||
fields = ["id", "representative", "partner", "representative_name"]
|
||||
|
||||
def get_representative_name(self, obj):
|
||||
return f"{obj.representative.first_name} {obj.representative.last_name}"
|
||||
|
||||
|
||||
class SchoolResponsibilitySerializer(serializers.ModelSerializer):
|
||||
responsible_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = SchoolResponsibility
|
||||
fields = ["id", "academic_year", "responsible", "school", "responsible_name"]
|
||||
|
||||
def get_responsible_name(self, obj):
|
||||
return f"{obj.responsible.account.first_name} {obj.responsible.account.last_name}"
|
||||
|
||||
22
outreach/urls.py
Normal file
22
outreach/urls.py
Normal file
@@ -0,0 +1,22 @@
|
||||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from .views import (
|
||||
InstitutionTypeViewSet,
|
||||
RepresentativeViewSet,
|
||||
SchoolViewSet,
|
||||
PartnerViewSet,
|
||||
PartnerRepresentativeViewSet,
|
||||
SchoolResponsibilityViewSet,
|
||||
)
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r"institution-types", InstitutionTypeViewSet, basename="institution-type")
|
||||
router.register(r"representatives", RepresentativeViewSet, basename="representative")
|
||||
router.register(r"schools", SchoolViewSet, basename="school")
|
||||
router.register(r"partners", PartnerViewSet, basename="partner")
|
||||
router.register(r"partner-representatives", PartnerRepresentativeViewSet, basename="partner-representative")
|
||||
router.register(r"school-responsibilities", SchoolResponsibilityViewSet, basename="school-responsibility")
|
||||
|
||||
urlpatterns = [
|
||||
path("", include(router.urls)),
|
||||
]
|
||||
@@ -1,3 +1,73 @@
|
||||
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 (
|
||||
InstitutionType,
|
||||
Representative,
|
||||
School,
|
||||
Partner,
|
||||
PartnerRepresentative,
|
||||
SchoolResponsibility,
|
||||
)
|
||||
from .serializers import (
|
||||
InstitutionTypeSerializer,
|
||||
RepresentativeSerializer,
|
||||
SchoolSerializer,
|
||||
PartnerSerializer,
|
||||
PartnerRepresentativeSerializer,
|
||||
SchoolResponsibilitySerializer,
|
||||
)
|
||||
from .filters import (
|
||||
SchoolFilter,
|
||||
SchoolResponsibilityFilter,
|
||||
) # Фильтры будут добавлены позже
|
||||
|
||||
# Create your views here.
|
||||
class InstitutionTypeViewSet(viewsets.ModelViewSet):
|
||||
queryset = InstitutionType.objects.all()
|
||||
serializer_class = InstitutionTypeSerializer
|
||||
filter_backends = [SearchFilter, OrderingFilter]
|
||||
search_fields = ["name"]
|
||||
ordering_fields = ["name"]
|
||||
|
||||
|
||||
class RepresentativeViewSet(viewsets.ModelViewSet):
|
||||
queryset = Representative.objects.all()
|
||||
serializer_class = RepresentativeSerializer
|
||||
filter_backends = [SearchFilter, OrderingFilter]
|
||||
search_fields = ["first_name", "last_name", "position"]
|
||||
ordering_fields = ["position"]
|
||||
|
||||
|
||||
class SchoolViewSet(viewsets.ModelViewSet):
|
||||
queryset = School.objects.all()
|
||||
serializer_class = SchoolSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_class = SchoolFilter
|
||||
search_fields = ["name", "address"]
|
||||
ordering_fields = ["institution_type", "name"]
|
||||
|
||||
|
||||
class PartnerViewSet(viewsets.ModelViewSet):
|
||||
queryset = Partner.objects.all()
|
||||
serializer_class = PartnerSerializer
|
||||
filter_backends = [SearchFilter, OrderingFilter]
|
||||
search_fields = ["name", "description"]
|
||||
ordering_fields = ["name"]
|
||||
|
||||
|
||||
class PartnerRepresentativeViewSet(viewsets.ModelViewSet):
|
||||
queryset = PartnerRepresentative.objects.all()
|
||||
serializer_class = PartnerRepresentativeSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_fields = ["representative", "partner"]
|
||||
search_fields = ["representative__first_name", "partner__name"]
|
||||
ordering_fields = ["partner", "representative"]
|
||||
|
||||
|
||||
class SchoolResponsibilityViewSet(viewsets.ModelViewSet):
|
||||
queryset = SchoolResponsibility.objects.all()
|
||||
serializer_class = SchoolResponsibilitySerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_class = SchoolResponsibilityFilter
|
||||
search_fields = ["school__name", "responsible__account__first_name"]
|
||||
ordering_fields = ["academic_year", "responsible", "school"]
|
||||
Reference in New Issue
Block a user