Почему Abstract = True не наследуется в Мета-классе модели django - PullRequest
0 голосов
/ 15 февраля 2020

У нас есть эти модели в django:

class FotherModel(models.Model):
    # Some fields goes here! 
    class Meta: 
        # Some fields goes here! 
        abstract = True 
class ChildModel(FotherModel):
    # Some fields goes here! 
    class Meta(FotherModel.Meta):
        #s Some fields goes here! 

Когда мы наследуем поле из мета-класса Django моделей, это поле появляется в дочернем мета-классе, Но это правило не относится к abstract=True.

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

Ответы [ 2 ]

2 голосов
/ 15 февраля 2020

Метакласс модели сбрасывает abstract в метаклассе модели. В этом документе вы можете видеть:

Django выполняет одну настройку для класса Meta абстрактного базового класса: перед установкой атрибута Meta он устанавливает abstract = False , Это означает, что потомки абстрактных базовых классов сами не становятся автоматически абстрактными классами.

Кроме того, вы можете увидеть исходный код этого процесса в этой ссылке :

if abstract:
    # Abstract base models can't be instantiated and don't appear in
    # the list of models for an app. We do the final setup for them a
    # little differently from normal models.
    attr_meta.abstract = False
    new_class.Meta = attr_meta
    return new_class
2 голосов
/ 15 февраля 2020

Из-за концепции и влияния некоторых полей в мета-секции во многих случаях не имеет смысла, что поле наследуется детьми.

Это было описано здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...