Django: Применение индексов к абстрактным моделям, чтобы они были у детей

Можно ли применять индексы к абстрактным моделям так, чтобы все дочерние модели наследовали их?

У меня есть абстрактная модель, которая питает другие модели :

from model_utils.models import UUIDModel
from django.db import models


class TimeStampedUUIDModel(UUIDModel):
    created_at = models.DateTimeField(auto_now_add=True, db_index=True)
    updated_at = models.DateTimeField(auto_now=True, db_index=True)

    class Meta:
        abstract = True

class ModelA(TimeStampedUUIDModel):
    name_a = models.CharField(max_length=30)

class ModelB(ModelA):
    name_b = models.CharField(max_length=30)

И я хотел добавить индекс на эту абстрактную модель, чтобы у меня были :

    class Meta:
        abstract = True
        indexes = (
            BrinIndex(fields=['created_at']),
            BrinIndex(fields=['updated_at']),
        )   

У меня такая ошибка:

(models.E016) 'indexes' refers to field 'created_at' which is not local to model 'ModelA'.
HINT: This issue may be caused by multi-table inheritance.

Каким образом лучше всего сделать наследование мета на такой модели?

Каждый индекс должен иметь уникальное имя; поскольку дочерние индексы наследуют имя индекса от родительского, возникает коллизия, поэтому необходимо задать явное имя, содержащее '%(class)s':

class TimeStampedUUIDModel(UUIDModel):
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

   class Meta:
      abstract = True
      indexes = (
         BrinIndex(fields=['created_at'], name='%(class)s_created_at_index'),
         BrinIndex(fields=['updated_at'], name='%(class)s_updated_at_index')
      )   

Если другие модели наследуют от ModelA, их следует установить как абстрактные. В противном случае сделайте их наследниками от TimeStampedUUIDModel и переопределите общие поля.

Вернуться на верх