diff --git a/flashcards/models.py b/flashcards/models.py index bec4c6c..0e9676f 100644 --- a/flashcards/models.py +++ b/flashcards/models.py @@ -12,6 +12,7 @@ from fields import MaskField AbstractUser._meta.get_field('email')._unique = True AbstractUser._meta.get_field('username')._unique = False + class EmailOnlyUserManager(UserManager): """ A tiny extension of Django's UserManager which correctly creates users @@ -176,7 +177,6 @@ class Flashcard(Model): # and there are no other users with this card in their decks create_new = user != self.author or \ UserFlashcard.objects.filter(flashcard=self).exclude(user=user).exists() - if 'material_date' in new_data and self.material_date != new_data['material_date']: content_changed = True self.material_date = new_data['material_date'] @@ -184,12 +184,17 @@ class Flashcard(Model): content_changed = True self.text = new_data['text'] if create_new and content_changed: + if self.is_in_deck(user): user.unpull(self) self.previous_id = self.pk - if 'mask' in new_data: - self.mask = new_data['mask'] self.pk = None + self.mask = new_data.get('mask', self.mask) self.save() - return create_new and content_changed + self.add_to_deck(user) + else: + user_card, created = UserFlashcard.objects.get_or_create(user=user, flashcard=self) + user_card.mask = new_data.get('mask', user_card.mask) + user_card.save() + return self @classmethod def cards_visible_to(cls, user): diff --git a/flashcards/serializers.py b/flashcards/serializers.py index 2f372b5..1a57f60 100644 --- a/flashcards/serializers.py +++ b/flashcards/serializers.py @@ -7,7 +7,6 @@ from flashcards.models import Section, LecturePeriod, User, Flashcard from flashcards.validators import FlashcardMask, OverlapIntervalException from rest_framework import serializers from rest_framework.fields import EmailField, BooleanField, CharField, IntegerField, DateTimeField -from rest_framework.relations import HyperlinkedRelatedField from rest_framework.serializers import ModelSerializer, Serializer from rest_framework.validators import UniqueValidator @@ -81,7 +80,7 @@ class SectionSerializer(ModelSerializer): class UserSerializer(ModelSerializer): email = EmailField(required=False) - sections = HyperlinkedRelatedField(queryset=Section.objects.all(), many=True, view_name='section-detail') + sections = SectionSerializer(many=True) is_confirmed = BooleanField() class Meta: diff --git a/flashcards/views.py b/flashcards/views.py index ea75d7c..715ca6a 100644 --- a/flashcards/views.py +++ b/flashcards/views.py @@ -357,13 +357,5 @@ class FlashcardViewSet(GenericViewSet, CreateModelMixin, RetrieveModelMixin): data = FlashcardUpdateSerializer(data=request.data) data.is_valid(raise_exception=True) new_flashcard = data.validated_data - new_card = flashcard.edit(user, new_flashcard) - if new_card: - flashcard.add_to_deck(user) - else: - user_card, created = UserFlashcard.objects.get_or_create(user=user, flashcard=flashcard) - if (not created) and ('mask' in new_flashcard): - user_card.mask = new_flashcard['mask'] - user_card.save() - - return Response(FlashcardSerializer(flashcard).data, status=HTTP_200_OK) \ No newline at end of file + new_flashcard = flashcard.edit(user, new_flashcard) + return Response(FlashcardSerializer(new_flashcard).data, status=HTTP_200_OK) \ No newline at end of file