Moduł django
zawiera podmoduł db
, który zawiera moduł models
, który wystawia na świat klasę Model
.
Nie traktujmy odwoływania się do modułów 1:1 jak odwoływania się do katalogów, ale generalnie idea jest podobna - masz jakąś hierarchiczną strukturę i możesz sięgać do kolejnych poziomów etc. aż wydłubiesz to, czego potrzebujesz. W linijce z importem mówisz Z podmodułu db modułu django zaimportuj podmoduł models
, natomiast odwołując się do klasy Model mówisz z tego zaimportowanego modułu models wyjmij klasę Model
.
Możesz importować bezproblemowo wszystko, co samo w sobie też jest modułem. Generalnie moduł i folder to nie to samo, tzn. owszem, moduł jest jakimś katalogiem, ale też np. wystawia on plik __init__.py
w którym np. można "powiedzieć", co dany moduł wystawia na świat. Bez tego pliku interpreter potrafi zgłupieć przy próbach importowania czegokolwiek :P migrations
też jest modułem, więc jak najbardziej można z niego korzystać. No i oczywiście importować możesz moduły, klasy Pythonowe etc, jak zrobisz moduł z folderu ze zdjęciami kotów, to nie zaimportujesz tym do kodu zdjęć kotów :)