Немного поиграв с вашим кодом, я нашел три возможных решения, которые, кажется, работают (согласно моим тестам):
Вариант 1 :
Создать комбинированный менеджер, который используется при определении вашей конкретной MyNewModel и использует его для этой модели:
class CombiManager(SoftDeletableManager, BookAwareManager):
def get_queryset(self):
qs1 = SoftDeletableManager.get_queryset(self)
qs2 = BookAwareManager.get_queryset(self)
return qs1.intersection(qs2)
, а затем
class MyNewModel(SoftDeleteModel, BookAwareModel):
objects = CombiManager()
Опция 2:
Создайте менеджер для модели BookAware в качестве подкласса SoftDeleteableManager
class BookAwareManager(SoftDeletableManager):
def get_queryset(self):
return super().get_queryset().filter(your_filter)
, а затем добавьте его в свою модель BookAware
с именем, отличным от «объектов»:
class BookAwareModel(models.Model):
book = models.ForeignKey(Book)
book_objects = BookAwareManager()
class Meta:
abstract = True
, позволяющий получить отфильтрованный набор запросов, например
MyNewModel.book_objects.all()
Опция 3
Поместите BookAwareManager, как во втором варианте, в качестве менеджера в ваш конкретный MyNewModel. Затем вы можете оставить имя менеджера в качестве «объектов» по умолчанию