Допустим, у меня есть три класса моделей django - давайте назовем их A, B и C. Если A и B абстрактные, я могу сделать что-то вроде:
class C(A,B):
pass
Что если они не абстрактные, а я делаю то же самое? Будет ли все еще работать правильно или нет? Или я неправильно понял, и этого не следует делать с абстрактными моделями?
У меня есть некоторые проблемы, которые я связываю с тем, что ответ, вероятно, нет, но я все же предпочел бы убедиться в этом, если кто-нибудь знает :)
Конкретный вариант использования, который у меня был для этого, вероятно, лучше обслуживать Родовые отношения (я только недавно обнаружил их существование), поэтому я думаю, что было бы понятно, если бы команда Django приняла такое дизайнерское решение (я могу не вижу много людей, нуждающихся в этом). Я просто хотел бы знать наверняка, в чем дело.
Редактировать 1 (после ответа Доминика)
Интересно ... Проблема, с которой мы сталкиваемся, - это структура, похожая на IMDb (я думаю, что IMDb немного легче понять, чем предмет, который у нас есть на самом деле, поэтому я буду использовать их в качестве примера). На IMDb есть страницы для людей и страницы для фильмов, а у людей и фильмов есть собственные доски объявлений.
Мы закончили тем, что подключили доски объявлений к людям и фильмам, создав модель MessageboardOwner (с одним атрибутом - идентификатором, автоматически добавленным Django), который «владеет» доской объявлений, а люди и фильмы наследуют ее. Проблема в том, что наш класс "People" также наследуется от двух других классов. Определение класса выглядит примерно так:
class Person(A,B,MessageboardOwner):
Первоначально это, казалось, работало нормально, но сегодня произошло нечто довольно странное ... Я удалял Персона в админке, и админ спросил: "Вы уверены?" вопрос и показывал мне, какие еще объекты он должен будет удалить. Он пытался удалить две доски объявлений, а не одну. Одна из этих досок объявлений должна была принадлежать фильму, а не человеку.
Посмотрев, что именно было в базе данных, я обнаружил, что этот экземпляр Person использует тот же экземпляр MessageboardOwner, что и Movie. Когда я поиграл с этим, получилось, что класс Movie, унаследованный только после MessageboardOwner, вроде бы работал нормально. Однако при сохранении Person объект MessageboardOwner создавался только в том случае, если он еще не существует (или, возможно, перезаписал существующий - я не уверен). Я также обнаружил, что поля id, унаследованные от A, B и MessageboardOwner, всегда были одинаковыми, что мне показалось странным.