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