Odpowiedzi, które twierdzą, że model Django Meta
i metaklasy są „zupełnie inne”, są mylącymi odpowiedziami.
Konstrukcja obiektów klasy modelu Django (to znaczy obiektu, który oznacza samą definicję klasy; tak, klasy są również obiektami) jest rzeczywiście kontrolowana przez metaklasę o nazwie ModelBase
, możesz zobaczyć ten kod tutaj:
https://github.com/django/django/blob/master/django/db/models/base.py#L61
Jedną z rzeczy, które ModelBase
to robi, jest utworzenie _meta
atrybutu na każdym modelu Django, który zawiera maszynę do sprawdzania poprawności, szczegóły pola, logikę składowania i tak dalej. Podczas tej operacji elementy określone w wewnętrznej Meta
klasie modelu są odczytywane i wykorzystywane w tym procesie.
A więc w pewnym sensie tak Meta
metaklasy są różnymi „rzeczami”, w mechanice konstrukcji modelu Django są one ściśle powiązane; zrozumienie, jak one działają razem, pogłębi twój wgląd w oba naraz.
Może to być pomocne źródło informacji, aby lepiej zrozumieć, w jaki sposób modele Django wykorzystują metaklasy.
https://code.djangoproject.com/wiki/DevModelCreation
Może to również pomóc, jeśli chcesz lepiej zrozumieć, jak ogólnie działają obiekty.
https://docs.python.org/3/reference/datamodel.html