class CustomModelBase (ModelBase):
    """Metaclass for AbstractModel"""
    def __new__ (cls, name, bases, attrs):
        """ Sets SOME_ID to match the child model's name, 
if it's not explicitly set in the child model"""
        model = super (CustomModelBase,cls).__new__(cls, name, bases, attrs)
        if not (model._meta.abstract or hasattr(model,'SOME_ID')):
            setattr(model,'SOME_ID',model._meta.object_name)
        return model

class AbstractModel(models.Model):
    """This is the abstract class to be inherited by model classes. 
You define some common stuff here """
    __metaclass__ = CustomModelBase
    class Meta:
        abstract = True
    # objects = SomeCustomManager()
    # custom_field = models.CharField (...)
    # etc abstract attributes

class ActualDataModel (AbstractModel):
    """ This is the actual model describing data. 
It inherits all attributes from the AbstractModel class. 
By default ActualModel.SOME_ID will be equal to "ActualModel". 
However, you can override this by setting it explicitly:"""
    # SOME_ID = 'SomeFunnyID'

