common api
This commit is contained in:
19
surveys/filters.py
Normal file
19
surveys/filters.py
Normal 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
81
surveys/serializers.py
Normal 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
30
surveys/urls.py
Normal 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)),
|
||||
]
|
||||
118
surveys/views.py
118
surveys/views.py
@@ -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"]
|
||||
Reference in New Issue
Block a user