Respostas que reivindicam o modelo do Django Meta
e metaclasses do são "completamente diferentes" são respostas enganosas.
A construção dos objetos de classe do modelo Django (ou seja, o objeto que representa a própria definição de classe; sim, classes também são objetos) são realmente controlados por uma metaclasse chamada ModelBase
, você pode ver esse código aqui:
https://github.com/django/django/blob/master/django/db/models/base.py#L61
E uma das coisas que ModelBase
faz é criar o _meta
atributo em todos os modelos do Django que contenham mecanismos de validação, detalhes de campo, salvar lógica e assim por diante. Durante esta operação, o material especificado nas partes internas do modeloMeta
classe são lidas e usadas nesse processo.
Então, enquanto sim, em certo sentido, Meta
e as metaclasses são 'coisas' diferentes, dentro da mecânica da construção do modelo do Django elas estão intimamente relacionadas; a compreensão de como eles funcionam juntos aprofundará sua percepção dos dois ao mesmo tempo.
Esta pode ser uma fonte útil de informações para entender melhor como os modelos do Django empregam metaclasses.
https://code.djangoproject.com/wiki/DevModelCreation
E isso também pode ajudar se você quiser entender melhor como os objetos funcionam em geral.
https://docs.python.org/3/reference/datamodel.html