diff --git a/apps/fsm/migrations/0234_alter_paper_paper_type.py b/apps/fsm/migrations/0234_alter_paper_paper_type.py new file mode 100644 index 00000000..f7a6512b --- /dev/null +++ b/apps/fsm/migrations/0234_alter_paper_paper_type.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.3 on 2024-12-13 15:41 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('fsm', '0233_form_participant_limit'), + ] + + operations = [ + migrations.AlterField( + model_name='paper', + name='paper_type', + field=models.CharField(choices=[('RegistrationForm', 'Registrationform'), ('Hint', 'Hint'), ('WidgetHint', 'Widgethint'), ('Article', 'Article'), ('General', 'General')], default='General', max_length=25), + ), + ] diff --git a/apps/fsm/models/base.py b/apps/fsm/models/base.py index 2fed6b7e..e5086123 100644 --- a/apps/fsm/models/base.py +++ b/apps/fsm/models/base.py @@ -103,7 +103,6 @@ class Paper(PolymorphicModel, ObjectMixin): class PaperType(models.TextChoices): RegistrationForm = 'RegistrationForm' - State = 'State' Hint = 'Hint' WidgetHint = 'WidgetHint' Article = 'Article' diff --git a/apps/fsm/serializers/form/form_polymorphic_serializer.py b/apps/fsm/serializers/form/form_polymorphic_serializer.py new file mode 100644 index 00000000..05c88200 --- /dev/null +++ b/apps/fsm/serializers/form/form_polymorphic_serializer.py @@ -0,0 +1,12 @@ +from rest_polymorphic.serializers import PolymorphicSerializer + +from apps.fsm.models.form import Form, RegistrationForm +from apps.fsm.serializers.form.form_serializer import FormSerializer +from apps.fsm.serializers.form.registration_form_serializer import RegistrationFormSerializer + + +class FormPolymorphicSerializer(PolymorphicSerializer): + model_serializer_mapping = { + Form: FormSerializer, + RegistrationForm: RegistrationFormSerializer, + } diff --git a/apps/fsm/serializers/form_serializer.py b/apps/fsm/serializers/form/form_serializer.py similarity index 80% rename from apps/fsm/serializers/form_serializer.py rename to apps/fsm/serializers/form/form_serializer.py index 91ac2a02..5e000523 100644 --- a/apps/fsm/serializers/form_serializer.py +++ b/apps/fsm/serializers/form/form_serializer.py @@ -7,6 +7,6 @@ class FormSerializer(PaperSerializer): class Meta(PaperSerializer.Meta): model = Form ref_name = 'registration_form' - fields = PaperSerializer.Meta.get_fields() + \ + fields = [field for field in PaperSerializer.Meta.fields if field != 'widgets'] +\ ['audience_type', 'start_date', 'end_date'] read_only_fields = PaperSerializer.Meta.read_only_fields + [] diff --git a/apps/fsm/serializers/papers/registration_form_serializer.py b/apps/fsm/serializers/form/registration_form_serializer.py similarity index 81% rename from apps/fsm/serializers/papers/registration_form_serializer.py rename to apps/fsm/serializers/form/registration_form_serializer.py index 6957e396..aa8bbea5 100644 --- a/apps/fsm/serializers/papers/registration_form_serializer.py +++ b/apps/fsm/serializers/form/registration_form_serializer.py @@ -1,5 +1,5 @@ from apps.fsm.models.base import Paper -from apps.fsm.serializers.form_serializer import FormSerializer +from apps.fsm.serializers.form.form_serializer import FormSerializer from django.core.validators import MaxValueValidator, MinValueValidator from django.db import transaction from rest_framework import serializers @@ -31,6 +31,6 @@ def create(self, validated_data): class Meta(FormSerializer.Meta): model = RegistrationForm - fields = FormSerializer.Meta.get_fields() + ['min_grade', 'max_grade', 'program', 'accepting_status', - 'certificate_templates', 'has_certificate', 'certificates_ready', 'gender_partition_status'] + fields = FormSerializer.Meta.fields + ['min_grade', 'max_grade', 'program', 'accepting_status', + 'certificate_templates', 'has_certificate', 'certificates_ready', 'gender_partition_status'] read_only_fields = FormSerializer.Meta.read_only_fields + [] diff --git a/apps/fsm/serializers/papers/article_serializer.py b/apps/fsm/serializers/papers/article_serializer.py index 172dd7c7..cb6065f3 100644 --- a/apps/fsm/serializers/papers/article_serializer.py +++ b/apps/fsm/serializers/papers/article_serializer.py @@ -61,6 +61,6 @@ def to_representation(self, instance): class Meta(PaperSerializer.Meta): model = Article ref_name = 'article' - fields = PaperSerializer.Meta.get_fields() + ['name', 'description', 'tags', - 'is_draft', 'publisher', 'cover_page'] + fields = [field for field in PaperSerializer.Meta.fields if field != 'widgets'] +\ + ['name', 'description', 'tags', 'is_draft', 'publisher', 'cover_page'] read_only_fields = PaperSerializer.Meta.read_only_fields + [] diff --git a/apps/fsm/serializers/papers/hint_serializer.py b/apps/fsm/serializers/papers/hint_serializer.py index 1a364a91..20f74c80 100644 --- a/apps/fsm/serializers/papers/hint_serializer.py +++ b/apps/fsm/serializers/papers/hint_serializer.py @@ -6,5 +6,6 @@ class HintSerializer(PaperSerializer): class Meta(PaperSerializer.Meta): model = Hint - fields = PaperSerializer.Meta.get_fields() + ['reference'] + fields = [field for field in PaperSerializer.Meta.fields if field != 'widgets'] +\ + ['reference'] read_only_fields = PaperSerializer.Meta.read_only_fields + [] diff --git a/apps/fsm/serializers/papers/paper_polymorphic_serializer.py b/apps/fsm/serializers/papers/paper_polymorphic_serializer.py index 761608a7..d932f3ac 100644 --- a/apps/fsm/serializers/papers/paper_polymorphic_serializer.py +++ b/apps/fsm/serializers/papers/paper_polymorphic_serializer.py @@ -3,14 +3,12 @@ from apps.fsm.serializers.papers.article_serializer import ArticleSerializer from apps.fsm.serializers.papers.hint_serializer import HintSerializer from apps.fsm.serializers.papers.paper_serializer import PaperSerializer -from apps.fsm.serializers.papers.registration_form_serializer import RegistrationFormSerializer from apps.widgets.serializers.widget_hint_serializer import WidgetHintSerializer class PaperPolymorphicSerializer(PolymorphicSerializer): model_serializer_mapping = { - 'Paper': PaperSerializer, - 'RegistrationForm': RegistrationFormSerializer, + 'General': PaperSerializer, 'Article': ArticleSerializer, 'Hint': HintSerializer, 'WidgetHint': WidgetHintSerializer, diff --git a/apps/fsm/serializers/papers/paper_serializer.py b/apps/fsm/serializers/papers/paper_serializer.py index f3bc6fb1..7a904ce8 100644 --- a/apps/fsm/serializers/papers/paper_serializer.py +++ b/apps/fsm/serializers/papers/paper_serializer.py @@ -29,9 +29,6 @@ class Meta: fields = ['id', 'widgets', 'paper_type', 'creator'] read_only_fields = ['id'] - def get_fields(): - return [field for field in PaperSerializer.Meta.fields if field != 'widgets'] - class ChangeWidgetOrderSerializer(serializers.Serializer): order = serializers.ListField( diff --git a/apps/fsm/serializers/program_serializers.py b/apps/fsm/serializers/program_serializers.py index e4794ebe..794011b3 100644 --- a/apps/fsm/serializers/program_serializers.py +++ b/apps/fsm/serializers/program_serializers.py @@ -1,7 +1,7 @@ from rest_framework.exceptions import ParseError from rest_framework import serializers -from apps.fsm.serializers.papers.registration_form_serializer import RegistrationFormSerializer +from apps.fsm.serializers.form.registration_form_serializer import RegistrationFormSerializer from apps.fsm.serializers.program_contact_info_serializer import ProgramContactInfoSerializer from apps.fsm.utils.utils import add_admin_to_program from errors.error_codes import serialize_error diff --git a/apps/fsm/views/form_view.py b/apps/fsm/views/form_view.py index 7ee86da4..4e93aa1d 100644 --- a/apps/fsm/views/form_view.py +++ b/apps/fsm/views/form_view.py @@ -6,16 +6,15 @@ from rest_framework.permissions import AllowAny from rest_framework.exceptions import PermissionDenied from drf_yasg.utils import swagger_auto_schema -from django.db import transaction from apps.fsm.models.form import Form -from apps.fsm.serializers.form_serializer import FormSerializer +from apps.fsm.serializers.form.form_polymorphic_serializer import FormPolymorphicSerializer from apps.fsm.utils.submission.form_submission_handler import FormSubmissionHandler from apps.response.serializers.answer_sheet import AnswerSheetSerializer class FormViewSet(ModelViewSet): - serializer_class = FormSerializer + serializer_class = FormPolymorphicSerializer queryset = Form.objects.all() permission_classes = [AllowAny] diff --git a/apps/fsm/views/registration_view.py b/apps/fsm/views/registration_view.py index 4541cfd8..361c6657 100644 --- a/apps/fsm/views/registration_view.py +++ b/apps/fsm/views/registration_view.py @@ -9,7 +9,7 @@ from apps.fsm.serializers.answer_sheet_serializers import RegistrationReceiptSerializer from apps.fsm.models import RegistrationForm, transaction, RegistrationReceipt, Invitation from apps.fsm.permissions import IsRegistrationFormModifier -from apps.fsm.serializers.papers.registration_form_serializer import RegistrationFormSerializer +from apps.fsm.serializers.form.registration_form_serializer import RegistrationFormSerializer from apps.fsm.serializers.team_serializer import InvitationSerializer from apps.fsm.pagination import RegistrationReceiptSetPagination diff --git a/apps/widgets/serializers/widget_hint_serializer.py b/apps/widgets/serializers/widget_hint_serializer.py index 5ade17a1..08cb4415 100644 --- a/apps/widgets/serializers/widget_hint_serializer.py +++ b/apps/widgets/serializers/widget_hint_serializer.py @@ -6,5 +6,6 @@ class WidgetHintSerializer(PaperSerializer): class Meta(PaperSerializer.Meta): model = WidgetHint - fields = PaperSerializer.Meta.get_fields() + ['reference'] + fields = [field for field in PaperSerializer.Meta.fields if field != 'widgets'] +\ + ['reference'] read_only_fields = PaperSerializer.Meta.read_only_fields + []