ну да, так и есть. Вот пример класса как раз под сео-задачи:
class SEOFieldsMixin(models.Model):
browser_title = models.CharField(_('browser title'), max_length=512, null=True, blank=True)
meta_description = models.TextField(_('meta description'), max_length=512, null=True, blank=True)
meta_keywords = models.TextField(_('meta keywords'), max_length=512, null=True, blank=True)
class Meta:
abstract = True
живёт в специальном приложении, которое кроме того ещё тучку всяких сео-плюшек содержит. Ну и, соответственно, реальная модель наследуется не только от этого класса:
class Offer(SEOFieldsMixin, ModeratorSolutionMixin):
…
А если в каком-то приложении из двух полей одно нужно удалить, то может не надо наследоваться от базового? Или сделать совсем базовую модель с одним полем, от которой наследовать базовую, добавив второе, а у реальных моделей выбирать, от кого наследоваться: от базового или совсем базового. Но не чересчур ли это мудрёж будет?