django abstract models versus regular inheritance

Besides the syntax, what's the difference between using a django abstract model and using plain Python inheritance with django models? Pros and cons?

UPDATE: I think my question was misunderstood and I received responses for the difference between an abstract model and a class that inherits from django.db.models.Model. I actually want to know the difference between a model class that inherits from a django abstract class (Meta: abstract = True) and a plain Python class that inherits from say, 'object' (and not models.Model).

Here is an example:

    class User(object):
       first_name = models.CharField(..

       def get_username(self):
           return self.username

    class User(models.Model):
       first_name = models.CharField(...

       def get_username(self):
           return self.username

       class Meta:
           abstract = True

    class Employee(User):
       title = models.CharField(...

I actually want to know the difference between a model class that inherits from a django abstract class (Meta: abstract = True) and a plain Python class that inherits from say, 'object' (and not models.Model).

Django will only generate tables for subclasses of models.Model, so the former...

    class User(models.Model):
       first_name = models.CharField(max_length=255)

       def get_username(self):
           return self.username

       class Meta:
           abstract = True

    class Employee(User):
       title = models.CharField(max_length=255)

...will cause a single table to be generated, along the lines of...

    CREATE TABLE myapp_employee
    (
        id         INT          NOT NULL AUTO_INCREMENT,
        first_name VARCHAR(255) NOT NULL,
        title      VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );

...whereas the latter...

    class User(object):
       first_name = models.CharField(max_length=255)

       def get_username(self):
           return self.username

    class Employee(User):
       title = models.CharField(max_length=255)

...won't cause any tables to be generated.

You could use multiple inheritance to do something like this...

    class User(object):
       first_name = models.CharField(max_length=255)

       def get_username(self):
           return self.username

    class Employee(User, models.Model):
       title = models.CharField(max_length=255)

...which would create a table, but it will ignore the fields defined in the User class, so you'll end up with a table like this...

    CREATE TABLE myapp_employee
    (
        id         INT          NOT NULL AUTO_INCREMENT,
        title      VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    );

From: stackoverflow.com/q/16655097