Обычно вы можете получить список всех классов, наследующих конкретный класс, путем регистрации классов с помощью метакласса (как объясняется в одном из вопросов, которые вы связали). Однако модели Django используют свой собственный мета-класс для достижения большей части того, что они делают автоматически. Я бы не рекомендовал добавлять еще один мета-класс в этот микс - здесь все может go неправильно !!
К счастью, в django есть нечто, называемое структура типов содержимого , которая по сути, это реестр всех ваших моделей в конкретном проекте.
Чтобы получить список всех ваших моделей, вы можете сделать это:
from django.contrib.contenttypes.models import ContentType
content_types = ContentType.objects.all()
Это не будет модели, а скорее набор запросов из ContentType
экземпляров. Чтобы затем получить из этого классы моделей, вы можете сделать
models = [x.model_class() for x in content_types]
Итак, теперь у нас есть список моделей. Затем мы можем просто отфильтровать список до тех моделей, которые наследуют ваш миксин:
models_with_mixin = [x for x in models if issubclass(x, MyMixin)]
Мы можем упростить все вышеперечисленное до следующего:
from django.contrib.contenttypes.models import ContentType
models_with_mixin = [
x.model_class()
for x in ContentType.objects.all()
if issubclass(x.model_class(), MyMixin)
]