Я новый разработчик и изучаю Python и Django. Я пытаюсь понять структуру и поток за кулисами, и меня смущает строка кода, с которой я столкнулся. Ну, на самом деле меня смущает ряд вещей, но это один конкретный пример. Может ли кто-нибудь помочь мне понять последовательность следующего кода:
from django.contrib import admin
from .models import Post
admin.site.register(Post)
При поиске файлов библиотеки в моей виртуальной среде я нахожу папку с именем django, и внутри этой папки я нахожу contrib и внутри этой папки. Я нахожу админа. Я вижу, что файл init .py в пакете администратора содержит операторы импорта, которые импортируют в *, что, как я понимаю, является всем в различных доступных модулях. Когда я go копаюсь в различных модулях, я нахожу sites.py и внутри sites.py я нахожу переменную "site", которая является объектом, для которого был создан экземпляр. Вот фрагмент кода из модуля sites.py:
site = DefaultAdminSite()
Хорошо, вот где я запутался. Оглядываясь назад на исходный код, где извлекается функция «register». Я обращаюсь к переменной, которая содержит экземпляр объекта из класса DefaultAdminSite (). Этот класс также определен в sites.py и является дочерним классом LazyObject. LazyObject определен в модуле, расположенном по адресу django .utils.functional. Там тоже нет метода или атрибута регистра.
Итак, вкратце, вот что я думаю, код делает. Он обращается к экземпляру объекта "site", который находится по адресу django .contrib.admin.sites.site. Но затем этот объект сайта обращается к «зарегистрировать что-то или другое» и передает созданную мной модель Post. Я просто не могу найти "зарегистрироваться" нигде. Может кто-нибудь пролить свет на это?