diff --git a/openedx/core/djangolib/model_mixins.py b/openedx/core/djangolib/model_mixins.py index f2433475f5315b9151598c3a620460ddb0d609bd..5ceefb67dc432f4df44c39ab28ae1717d08dde1e 100644 --- a/openedx/core/djangolib/model_mixins.py +++ b/openedx/core/djangolib/model_mixins.py @@ -12,3 +12,25 @@ class DeprecatedModelMixin(object): Override to kill usage of this model. """ raise TypeError("This model has been deprecated and should not be used.") + + +class DeletableByUserValue(object): + """ + This mixin allows inheriting models to delete instances of the model + associated with some user. + """ + + @classmethod + def delete_by_user_value(cls, value, field): + """ + Deletes instances of this model where ``field`` equals ``value``. + + e.g. + ``delete_by_user_value(value='learner@example.com', field='email')`` + + Returns True if any instances were deleted. + Returns False otherwise. + """ + filter_kwargs = {field: value} + num_deleted_records, _ = cls.objects.filter(**filter_kwargs).delete() + return num_deleted_records > 0