Skip to content

Commit

Permalink
refactor: refactor widget serializers
Browse files Browse the repository at this point in the history
  • Loading branch information
AmooHashem committed Jul 28, 2024
1 parent 81648b6 commit ddde2c1
Show file tree
Hide file tree
Showing 13 changed files with 392 additions and 365 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.1.3 on 2024-07-28 15:41

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('fsm', '0144_rename_required_problem_is_required'),
]

operations = [
migrations.RemoveField(
model_name='widget',
name='be_corrected',
),
migrations.AddField(
model_name='problem',
name='be_corrected',
field=models.BooleanField(default=False),
),
]
7 changes: 4 additions & 3 deletions apps/fsm/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,6 @@ class WidgetTypes(models.TextChoices):
Cost, on_delete=models.CASCADE, null=True, blank=True)
reward = models.ForeignKey(
Reward, on_delete=models.CASCADE, null=True, blank=True)
be_corrected = models.BooleanField(default=False)

class Meta:
order_with_respect_to = 'paper'
Expand Down Expand Up @@ -806,6 +805,7 @@ class Problem(Widget):
text = models.TextField()
is_required = models.BooleanField(default=False)
solution = models.TextField(null=True, blank=True)
be_corrected = models.BooleanField(default=False)

@property
def correct_answer(self):
Expand Down Expand Up @@ -841,6 +841,9 @@ def clone(self, paper):


class MultiChoiceProblem(Problem):
maximum_choices_could_be_chosen = models.IntegerField(
validators=[MinValueValidator(0)], default=1)

def clone(self, paper):
cloned_widget = clone_widget(self, paper)
cloned_choices = [choice.clone(cloned_widget)
Expand All @@ -866,8 +869,6 @@ def correct_answer(self):
correct_answer_object.save()
return correct_answer_object

maximum_choices_could_be_chosen = models.IntegerField(
validators=[MinValueValidator(0)], default=1)


class Choice(models.Model):
Expand Down
8 changes: 3 additions & 5 deletions apps/fsm/serializers/answer_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ class AnswerSerializer(serializers.ModelSerializer):

def create(self, validated_data):
user = self.context.get('user', None)
answer_sheet = self.context.get('answer_sheet', None)
print("@@@@@@@@@@", answer_sheet)
validated_data.get('problem').unfinalize_older_answers(user)
return super().create({'submitted_by': user, **validated_data})

Expand Down Expand Up @@ -85,15 +83,15 @@ def create(self, validated_data):
choices_data = validated_data.pop('choices', [])
choices_ids = [choice_data['id'] for choice_data in choices_data]
choices_instances = Choice.objects.filter(id__in=choices_ids)
instance = super(MultiChoiceAnswerSerializer, self).create(
instance = super().create(
{'answer_type': 'MultiChoiceAnswer', **validated_data})
instance.choices.add(*choices_instances)
instance.save()
self.context['choices'] = choices_instances
return instance

def validate(self, attrs):
attrs = super(MultiChoiceAnswerSerializer, self).validate(attrs)
attrs = super().validate(attrs)
choices = attrs.get('choices', [])
problem = attrs.get('problem')
multi_choice_answer_validator(
Expand Down Expand Up @@ -139,7 +137,7 @@ class MockAnswerSerializer(serializers.Serializer):

class AnswerPolymorphicSerializer(PolymorphicSerializer):
model_serializer_mapping = {
# Answer: AnswerSerializer,
# Answer,
SmallAnswer: SmallAnswerSerializer,
BigAnswer: BigAnswerSerializer,
MultiChoiceAnswer: MultiChoiceAnswerSerializer,
Expand Down
2 changes: 1 addition & 1 deletion apps/fsm/serializers/paper_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from errors.error_codes import serialize_error
from apps.fsm.models import Program, Paper, WidgetHint, FSM, RegistrationForm, Article, Hint, Edge, State, Tag
from apps.fsm.serializers.certificate_serializer import CertificateTemplateSerializer
from apps.fsm.serializers.widget_polymorphic import WidgetPolymorphicSerializer
from apps.fsm.serializers.widgets.widget_polymorphic import WidgetPolymorphicSerializer


class PaperMinimalSerializer(serializers.ModelSerializer):
Expand Down
Loading

0 comments on commit ddde2c1

Please sign in to comment.