Наследование модели в целом полезно, поскольку вы выполняете запросы, такие как Company.objects.all (), чтобы вернуть все компании (включая рестораны), а также Restaurant.objects.all (), чтобы вернуть только ресторанные компании.Как и в случае «обычного» наследования, может быть полезно включить общие поля в родительскую (компанию) модель во все дочерние модели (ресторан).Например, все компании могут иметь поле адреса, но только рестораны могут иметь поле food_type.
Я задокументировал ссылки на несколько фрагментов, которые реализуют «набор запросов подклассов», который в основном позволяет вам выполнять запрос, например, Company.objects.all (), и возвращать вам результаты, например, [ <Ресторан>, , , <Ресторан>].Проверьте ссылку:
http://jazstudios.blogspot.com/2009/10/django-model-inheritance-with.html
Недостатком этого многостолового подхода является то, что он вводит дополнительное соединение в ваш запрос между родительской таблицей Company и дочерней таблицей Restaurant.
Альтернативой было бы создание абстрактной модели.Это создает отдельную таблицу для компании и ресторана с избыточными полями.При наследовании нескольких таблиц, если бы мы хотели найти поле адреса в экземпляре Restaurant, мы бы обратились (за кулисами) к соответствующей модели Company.С абстрактным наследованием, в таблице Restaurant будет фактически поле адреса.Кроме того, используя абстрактное наследование, я не думаю, что вы можете выполнить Company.objects.all () и ожидать, что он будет возвращать экземпляры, которые были добавлены как рестораны, а также вы не можете использовать наборы запросов подклассов из фрагментов, связанных выше.
Надеюсь, это поможет, Джо