Единственное наследование таблицы в Django

использовать современное соединение

SELECT Professor.firstName, Professor.lastName
FROM            Professor join "Group" g on
            g.professorCode = Professor.professorCode
               where  g.sessionCode in( 32003,12004 )
                AND g.sigle in( 'INF1130', 'INF1110','INF3180','INF2110')                        
             group by  Professor.firstName, Professor.lastName
             having count( distinct sigle )=4
25
задан sutee 27 October 2008 в 21:42
поделиться

4 ответа

В настоящее время в Django существуют две формы наследования - MTI (наследование таблиц моделей) и ABC (абстрактные базовые классы).

Я написал учебник о том, что происходит под капотом.

Вы также можете сослаться на официальные документы по модели наследования .

17
ответ дан 28 November 2019 в 21:14
поделиться

Я думаю, что ОП задает вопрос об наследовании одной таблицы, как определено здесь :

Реляционные базы данных не поддерживают наследование, поэтому при отображении объектов в базы данных мы имеем рассмотреть, как представить наши хорошие структуры наследования в реляционных таблицах. При отображении в реляционную базу данных мы стараемся свести к минимуму объединения, которые можно быстро смонтировать при обработке структуры наследования в нескольких таблицах. Наследование в одной таблице отображает все поля всех классов структуры наследования в одну таблицу.

То есть, одна таблица базы данных для всей иерархии классов сущностей. Джанго не поддерживает такого рода наследство.

17
ответ дан 28 November 2019 в 21:14
поделиться

Я думаю, вы можете сделать что-то похожее на это.

Я должен сам реализовать решение этой проблемы, и вот как я ее решил:

class Citrus(models.Model)
    how_acidic = models.PositiveIntegerField(max_value=100)
    skin_color = models.CharField()
    type = models.CharField()

class TangeloManager(models.Manager)
    def get_query_set(self):
        return super(TangeloManager, self).get_query_set().filter(type='Tangelo')

class Tangelo(models.Model)
    how_acidic = models.PositiveIntegerField(max_value=100)
    skin_color = models.CharField()
    type = models.CharField()
    objects = TangeloManager()
    class Meta:
        # 'appname' below is going to vary with the name of your app
        db_table = u'appname_citrus'

Это может иметь некоторые проблемы с блокировкой ... Я не совсем уверен, как Джанго справляется с этим с моей головы. Кроме того, я на самом деле не тестировал приведенный выше код, это исключительно для развлекательных целей, чтобы надеяться, что вы на правильном пути.

2
ответ дан 28 November 2019 в 21:14
поделиться

это может быть полезно: https://github.com/craigds/django-typed-models Это выглядит как реализация реализации наследования отдельных таблиц, но имеет ограничение, которое подклассы могут не имеет никаких дополнительных полей.

Существует также ветвь, которая решает проблему невозможности создания дополнительных полей: https://github.com/KrzysiekJ/django-typed-models

обновление: Я полагаю, что ответвление, возможно, было объединено в

. Это недавнее обсуждение в списке рассылки разработчиков django о STI: https://groups.google.com/forum/#!msg/django -developers / -UOM8HNUnxg / 6k34kopzerEJ

2
ответ дан 28 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: