from rest_framework import serializers from .models import User, SchoolID class SchoolIDSerializer(serializers.ModelSerializer): class Meta: model = SchoolID fields = ('id', 'school_index') class UserSerializer(serializers.ModelSerializer): is_superuser = serializers.BooleanField(read_only=True) school_index_object = SchoolIDSerializer(source='school_index', read_only=True) class Meta: model = User fields = ('id', 'username', 'school_index_object', 'school_index', 'email', 'role', 'is_superuser') class UserForAdminSerializer(UserSerializer): is_superuser = serializers.BooleanField() class LoginSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField() class TokenSerializer(serializers.Serializer): token = serializers.CharField() class RegisterSerializer(serializers.Serializer): username = serializers.CharField(max_length=150) email = serializers.EmailField() first_name = serializers.CharField(max_length=30, required=True, allow_blank=False) last_name = serializers.CharField(max_length=30, required=True, allow_blank=False) school_index = serializers.CharField(max_length=8, required=True) password = serializers.CharField(write_only=True, min_length=8) def validate_school_index(self, value): """ Check that school with this id is exists """ try: school = SchoolID.objects.get(school_index=value) user_exists = User.objects.filter(school_index=school).exists() if user_exists: raise serializers.ValidationError("User with this school ID already exists") except SchoolID.DoesNotExist: raise serializers.ValidationError("This school id is not exists") return school def create(self, validated_data): school = validated_data.pop('school_index') user = User.objects.create_user( username=validated_data['username'], email=validated_data['email'], first_name=validated_data.get('first_name'), last_name=validated_data.get('last_name'), password=validated_data['password'], school_index=school ) return user