class InviteSerializer(DispatchModelSerializer): """Serializes the Invite model.""" email = serializers.EmailField( required=True, validators=[UniqueValidator(queryset=User.objects.all())]) person = ForeignKeyField( model=Person, serializer=PersonSerializer(), validators=[UniqueValidator(queryset=User.objects.all())]) permissions = serializers.CharField(required=False, allow_blank=True) expiration_date = serializers.DateTimeField(read_only=True) class Meta: model = Invite fields = ('id', 'email', 'person', 'permissions', 'expiration_date') def create(self, validated_data): instance = Invite() return self.update(instance, validated_data) def update(self, instance, validated_data): send_invitation(validated_data['email'], instance.id) return super(InviteSerializer, self).update(instance, validated_data)
class UserSerializer(DispatchModelSerializer): """Serializes the User model.""" email = serializers.EmailField( required=True, validators=[UniqueValidator(queryset=User.objects.all())] ) person = ForeignKeyField( model=Person, serializer=PersonSerializer(), validators=[UniqueValidator(queryset=User.objects.all())] ) password_a = serializers.CharField( required=False, allow_blank=True, write_only=True, validators=[PasswordValidator(confirm_field='password_b')] ) password_b = serializers.CharField(required=False, allow_blank=True, write_only=True) permissions = serializers.CharField(source='get_permissions', read_only=True) permission_level = serializers.CharField(required=False, allow_null=True, write_only=True) user_id = serializers.IntegerField(source='get_user_id', read_only=True) class Meta: model = User fields = ( 'id', 'email', 'person', 'password_a', 'password_b', 'permissions', 'permission_level', 'user_id' ) def create(self, validated_data): instance = User.objects.create_user(validated_data['email'], validated_data['password_a'], validated_data['permission_level']) return self.update(instance, validated_data) def update(self, instance, validated_data): instance.email = validated_data.get('email', instance.email) instance.person = validated_data.get('person', instance.person) if validated_data.get('password_a'): instance.set_password(validated_data['password_a']) instance.save() permissions = validated_data.get('permission_level') instance.modify_permissions(permissions) return instance