common api
This commit is contained in:
34
events/filters.py
Normal file
34
events/filters.py
Normal file
@@ -0,0 +1,34 @@
|
||||
import django_filters
|
||||
from .models import Event, EventParticipant, MethodicalFile
|
||||
|
||||
class EventFilter(django_filters.FilterSet):
|
||||
name = django_filters.CharFilter(lookup_expr="icontains")
|
||||
location = django_filters.CharFilter(lookup_expr="icontains")
|
||||
date_after = django_filters.DateFilter(field_name="date", lookup_expr="gte")
|
||||
date_before = django_filters.DateFilter(field_name="date", lookup_expr="lte")
|
||||
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = ["name", "location", "date_after", "date_before"]
|
||||
|
||||
|
||||
class EventParticipantFilter(django_filters.FilterSet):
|
||||
student_name = django_filters.CharFilter(
|
||||
field_name="student__account__first_name", lookup_expr="icontains"
|
||||
)
|
||||
event_name = django_filters.CharFilter(field_name="event__name", lookup_expr="icontains")
|
||||
|
||||
class Meta:
|
||||
model = EventParticipant
|
||||
fields = ["student_name", "event_name", "points"]
|
||||
|
||||
|
||||
class MethodicalFileFilter(django_filters.FilterSet):
|
||||
name = django_filters.CharFilter(lookup_expr="icontains")
|
||||
specialty_name = django_filters.CharFilter(
|
||||
field_name="specialty__name", lookup_expr="icontains"
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = MethodicalFile
|
||||
fields = ["name", "specialty_name", "upload_date"]
|
||||
68
events/serializers.py
Normal file
68
events/serializers.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from rest_framework import serializers
|
||||
from .models import (
|
||||
EventStatus,
|
||||
ActivityType,
|
||||
Event,
|
||||
EventOrganizer,
|
||||
EventDetail,
|
||||
EventParticipant,
|
||||
MethodicalFile,
|
||||
RelevantMethodicalFile,
|
||||
)
|
||||
|
||||
class EventStatusSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EventStatus
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class ActivityTypeSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ActivityType
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class EventSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Event
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class EventOrganizerSerializer(serializers.ModelSerializer):
|
||||
employee_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = EventOrganizer
|
||||
fields = ["id", "employee", "event", "employee_name"]
|
||||
|
||||
def get_employee_name(self, obj):
|
||||
return f"{obj.employee.account.first_name} {obj.employee.account.last_name}"
|
||||
|
||||
|
||||
class EventDetailSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = EventDetail
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class EventParticipantSerializer(serializers.ModelSerializer):
|
||||
student_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = EventParticipant
|
||||
fields = ["id", "student", "event", "points", "student_name"]
|
||||
|
||||
def get_student_name(self, obj):
|
||||
return f"{obj.student.account.last_name} {obj.student.account.first_name}"
|
||||
|
||||
|
||||
class MethodicalFileSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = MethodicalFile
|
||||
fields = "__all__"
|
||||
|
||||
|
||||
class RelevantMethodicalFileSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = RelevantMethodicalFile
|
||||
fields = "__all__"
|
||||
26
events/urls.py
Normal file
26
events/urls.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from django.urls import path, include
|
||||
from rest_framework.routers import DefaultRouter
|
||||
from .views import (
|
||||
EventStatusViewSet,
|
||||
ActivityTypeViewSet,
|
||||
EventViewSet,
|
||||
EventOrganizerViewSet,
|
||||
EventDetailViewSet,
|
||||
EventParticipantViewSet,
|
||||
MethodicalFileViewSet,
|
||||
RelevantMethodicalFileViewSet,
|
||||
)
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r"event-statuses", EventStatusViewSet, basename="event-status")
|
||||
router.register(r"activity-types", ActivityTypeViewSet, basename="activity-type")
|
||||
router.register(r"events", EventViewSet, basename="event")
|
||||
router.register(r"event-organizers", EventOrganizerViewSet, basename="event-organizer")
|
||||
router.register(r"event-details", EventDetailViewSet, basename="event-detail")
|
||||
router.register(r"event-participants", EventParticipantViewSet, basename="event-participant")
|
||||
router.register(r"methodical-files", MethodicalFileViewSet, basename="methodical-file")
|
||||
router.register(r"relevant-methodical-files", RelevantMethodicalFileViewSet, basename="relevant-methodical-file")
|
||||
|
||||
urlpatterns = [
|
||||
path("", include(router.urls)),
|
||||
]
|
||||
@@ -1,3 +1,97 @@
|
||||
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 (
|
||||
EventStatus,
|
||||
ActivityType,
|
||||
Event,
|
||||
EventOrganizer,
|
||||
EventDetail,
|
||||
EventParticipant,
|
||||
MethodicalFile,
|
||||
RelevantMethodicalFile,
|
||||
)
|
||||
from .serializers import (
|
||||
EventStatusSerializer,
|
||||
ActivityTypeSerializer,
|
||||
EventSerializer,
|
||||
EventOrganizerSerializer,
|
||||
EventDetailSerializer,
|
||||
EventParticipantSerializer,
|
||||
MethodicalFileSerializer,
|
||||
RelevantMethodicalFileSerializer,
|
||||
)
|
||||
from .filters import (
|
||||
EventFilter,
|
||||
EventParticipantFilter,
|
||||
MethodicalFileFilter,
|
||||
) # Фильтры будут добавлены позже
|
||||
|
||||
# Create your views here.
|
||||
class EventStatusViewSet(viewsets.ModelViewSet):
|
||||
queryset = EventStatus.objects.all()
|
||||
serializer_class = EventStatusSerializer
|
||||
filter_backends = [SearchFilter, OrderingFilter]
|
||||
search_fields = ["name"]
|
||||
ordering_fields = ["name"]
|
||||
|
||||
|
||||
class ActivityTypeViewSet(viewsets.ModelViewSet):
|
||||
queryset = ActivityType.objects.all()
|
||||
serializer_class = ActivityTypeSerializer
|
||||
filter_backends = [SearchFilter, OrderingFilter]
|
||||
search_fields = ["name"]
|
||||
ordering_fields = ["name"]
|
||||
|
||||
|
||||
class EventViewSet(viewsets.ModelViewSet):
|
||||
queryset = Event.objects.all()
|
||||
serializer_class = EventSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_class = EventFilter
|
||||
search_fields = ["name", "location", "description"]
|
||||
ordering_fields = ["date", "name"]
|
||||
|
||||
|
||||
class EventOrganizerViewSet(viewsets.ModelViewSet):
|
||||
queryset = EventOrganizer.objects.all()
|
||||
serializer_class = EventOrganizerSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_fields = ["employee", "event"]
|
||||
search_fields = ["employee__account__first_name", "employee__account__last_name"]
|
||||
ordering_fields = ["employee", "event"]
|
||||
|
||||
|
||||
class EventDetailViewSet(viewsets.ModelViewSet):
|
||||
queryset = EventDetail.objects.all()
|
||||
serializer_class = EventDetailSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_fields = ["activity_type", "event"]
|
||||
search_fields = ["activity_type__name"]
|
||||
ordering_fields = ["activity_type", "event"]
|
||||
|
||||
|
||||
class EventParticipantViewSet(viewsets.ModelViewSet):
|
||||
queryset = EventParticipant.objects.all()
|
||||
serializer_class = EventParticipantSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_class = EventParticipantFilter
|
||||
search_fields = ["student__account__first_name", "student__account__last_name"]
|
||||
ordering_fields = ["event", "student", "points"]
|
||||
|
||||
|
||||
class MethodicalFileViewSet(viewsets.ModelViewSet):
|
||||
queryset = MethodicalFile.objects.all()
|
||||
serializer_class = MethodicalFileSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_class = MethodicalFileFilter
|
||||
search_fields = ["name", "specialty__name"]
|
||||
ordering_fields = ["specialty", "name", "upload_date"]
|
||||
|
||||
|
||||
class RelevantMethodicalFileViewSet(viewsets.ModelViewSet):
|
||||
queryset = RelevantMethodicalFile.objects.all()
|
||||
serializer_class = RelevantMethodicalFileSerializer
|
||||
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
|
||||
filterset_fields = ["methodical_file", "activity_type"]
|
||||
search_fields = ["methodical_file__name", "activity_type__name"]
|
||||
ordering_fields = ["methodical_file", "activity_type"]
|
||||
Reference in New Issue
Block a user