Why raise an error instead of returning `False` for the failure case? This feels like django forms's `is_valid` method returning `True`/`False` but proceeding to call `save` would error if it isn't valid.