Как django добавляет атрибуты объектов в классы моделей?

Как в документации Django

По умолчанию Django добавляет менеджера с именем objects в каждый класс модели Django.

Как Django добавляет атрибут в классы моделей? Наследуется ли он от models.Model или Django, добавляется objects=models.Manager() динамически к каждой модели?


person mcv    schedule 04.04.2018    source источник
comment
псс! попробуйте найти для себя, это весело! github.com/django/django/tree/master/django/db/ модели   -  person Kos    schedule 04.04.2018
comment
@Кос Да! django динамически добавляет объекты, используя функцию setattr() в python.   -  person mcv    schedule 04.04.2018


Ответы (1)


Он добавляется динамически к каждому классу модели, если вы не добавите его самостоятельно.

Взгляните на ModelBase._prepare:

def _prepare(cls):
    """Create some methods once self._meta has been populated."""
    opts = cls._meta
    opts._prepare(cls)

    ...

    if not opts.managers:
        if any(f.name == 'objects' for f in opts.fields):
            raise ValueError(
                "Model %s must specify a custom Manager, because it has a "
                "field named 'objects'." % cls.__name__
            )
        manager = Manager()
        manager.auto_created = True
        cls.add_to_class('objects', manager)
person Kos    schedule 04.04.2018