common api

This commit is contained in:
Mikan
2025-05-19 17:10:30 +03:00
parent 59df2c55d9
commit a0a337045b
13 changed files with 659 additions and 6 deletions

19
surveys/filters.py Normal file
View File

@@ -0,0 +1,19 @@
import django_filters
from .models import QuestionPair, Specialty
class QuestionPairFilter(django_filters.FilterSet):
survey_title = django_filters.CharFilter(field_name="survey__title", lookup_expr="icontains")
statement_a_text = django_filters.CharFilter(field_name="statement_a__statement", lookup_expr="icontains")
statement_b_text = django_filters.CharFilter(field_name="statement_b__statement", lookup_expr="icontains")
class Meta:
model = QuestionPair
fields = ["survey_title", "statement_a_text", "statement_b_text"]
class SpecialtyFilter(django_filters.FilterSet):
institution_name = django_filters.CharFilter(field_name="institution__name", lookup_expr="icontains")
class Meta:
model = Specialty
fields = ["name", "institution_name"]

81
surveys/serializers.py Normal file
View File

@@ -0,0 +1,81 @@
from rest_framework import serializers
from .models import (
Survey,
ScoreVariable,
Statement,
QuestionPair,
AgreementQuestion,
EducationalInstitution,
Profession,
Specialty,
ProfessionSpecialtyLink,
ProfessionTestResult,
)
class SurveySerializer(serializers.ModelSerializer):
class Meta:
model = Survey
fields = "__all__"
class ScoreVariableSerializer(serializers.ModelSerializer):
class Meta:
model = ScoreVariable
fields = "__all__"
class StatementSerializer(serializers.ModelSerializer):
class Meta:
model = Statement
fields = "__all__"
class QuestionPairSerializer(serializers.ModelSerializer):
statement_a_text = serializers.SerializerMethodField()
statement_b_text = serializers.SerializerMethodField()
class Meta:
model = QuestionPair
fields = ["id", "survey", "statement_a", "statement_b", "statement_a_text", "statement_b_text"]
def get_statement_a_text(self, obj):
return obj.statement_a.statement
def get_statement_b_text(self, obj):
return obj.statement_b.statement
class AgreementQuestionSerializer(serializers.ModelSerializer):
class Meta:
model = AgreementQuestion
fields = "__all__"
class EducationalInstitutionSerializer(serializers.ModelSerializer):
class Meta:
model = EducationalInstitution
fields = "__all__"
class ProfessionSerializer(serializers.ModelSerializer):
class Meta:
model = Profession
fields = "__all__"
class SurveySpecialtySerializer(serializers.ModelSerializer):
class Meta:
model = Specialty
fields = "__all__"
class ProfessionSpecialtyLinkSerializer(serializers.ModelSerializer):
class Meta:
model = ProfessionSpecialtyLink
fields = "__all__"
class ProfessionTestResultSerializer(serializers.ModelSerializer):
class Meta:
model = ProfessionTestResult
fields = "__all__"

30
surveys/urls.py Normal file
View File

@@ -0,0 +1,30 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import (
SurveyViewSet,
ScoreVariableViewSet,
StatementViewSet,
QuestionPairViewSet,
AgreementQuestionViewSet,
EducationalInstitutionViewSet,
ProfessionViewSet,
SpecialtyViewSet,
ProfessionSpecialtyLinkViewSet,
ProfessionTestResultViewSet,
)
router = DefaultRouter()
router.register(r"surveys", SurveyViewSet, basename="survey")
router.register(r"score-variables", ScoreVariableViewSet, basename="score-variable")
router.register(r"statements", StatementViewSet, basename="statement")
router.register(r"question-pairs", QuestionPairViewSet, basename="question-pair")
router.register(r"agreement-questions", AgreementQuestionViewSet, basename="agreement-question")
router.register(r"institutions", EducationalInstitutionViewSet, basename="institution")
router.register(r"professions", ProfessionViewSet, basename="profession")
router.register(r"specialties", SpecialtyViewSet, basename="specialty")
router.register(r"profession-specialty-links", ProfessionSpecialtyLinkViewSet, basename="profession-specialty-link")
router.register(r"profession-test-results", ProfessionTestResultViewSet, basename="profession-test-result")
urlpatterns = [
path("", include(router.urls)),
]

View File

@@ -1,3 +1,117 @@
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 (
Survey,
ScoreVariable,
Statement,
QuestionPair,
AgreementQuestion,
EducationalInstitution,
Profession,
Specialty,
ProfessionSpecialtyLink,
ProfessionTestResult,
)
from .serializers import (
SurveySerializer,
ScoreVariableSerializer,
StatementSerializer,
QuestionPairSerializer,
AgreementQuestionSerializer,
EducationalInstitutionSerializer,
ProfessionSerializer,
SurveySpecialtySerializer,
ProfessionSpecialtyLinkSerializer,
ProfessionTestResultSerializer,
)
from .filters import (
QuestionPairFilter,
SpecialtyFilter,
) # Фильтры будут добавлены позже
# Create your views here.
class SurveyViewSet(viewsets.ModelViewSet):
queryset = Survey.objects.all()
serializer_class = SurveySerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ["title"]
ordering_fields = ["title"]
class ScoreVariableViewSet(viewsets.ModelViewSet):
queryset = ScoreVariable.objects.all()
serializer_class = ScoreVariableSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["survey"]
search_fields = ["name", "title"]
ordering_fields = ["survey", "name"]
class StatementViewSet(viewsets.ModelViewSet):
queryset = Statement.objects.all()
serializer_class = StatementSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["score_variable"]
search_fields = ["statement"]
ordering_fields = ["statement"]
class QuestionPairViewSet(viewsets.ModelViewSet):
queryset = QuestionPair.objects.all()
serializer_class = QuestionPairSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = QuestionPairFilter
search_fields = ["statement_a__statement", "statement_b__statement"]
ordering_fields = ["survey", "statement_a", "statement_b"]
class AgreementQuestionViewSet(viewsets.ModelViewSet):
queryset = AgreementQuestion.objects.all()
serializer_class = AgreementQuestionSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["survey", "score_variable"]
search_fields = ["question"]
ordering_fields = ["survey", "question"]
class EducationalInstitutionViewSet(viewsets.ModelViewSet):
queryset = EducationalInstitution.objects.all()
serializer_class = EducationalInstitutionSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ["name"]
ordering_fields = ["name"]
class ProfessionViewSet(viewsets.ModelViewSet):
queryset = Profession.objects.all()
serializer_class = ProfessionSerializer
filter_backends = [SearchFilter, OrderingFilter]
search_fields = ["name"]
ordering_fields = ["name"]
class SpecialtyViewSet(viewsets.ModelViewSet):
queryset = Specialty.objects.all()
serializer_class = SurveySpecialtySerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_class = SpecialtyFilter
search_fields = ["name", "institution__name"]
ordering_fields = ["name", "institution"]
class ProfessionSpecialtyLinkViewSet(viewsets.ModelViewSet):
queryset = ProfessionSpecialtyLink.objects.all()
serializer_class = ProfessionSpecialtyLinkSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["profession", "specialty"]
search_fields = ["profession__name", "specialty__name"]
ordering_fields = ["profession", "specialty"]
class ProfessionTestResultViewSet(viewsets.ModelViewSet):
queryset = ProfessionTestResult.objects.all()
serializer_class = ProfessionTestResultSerializer
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ["profession", "survey_score_variable"]
search_fields = ["profession__name", "survey_score_variable__title"]
ordering_fields = ["profession", "survey_score_variable"]