Seria interessante, viável ou dentro dos padrões separar os modelos em arquivos .py para cada um e após isso, importá-los na models.py?
Seria interessante, viável ou dentro dos padrões separar os modelos em arquivos .py para cada um e após isso, importá-los na models.py?
Oi Andrei, tudo bem com você?
É uma boa prática que façamos isso quando possuímos muitos modelos. A documentação recomenda que façamos a criação de uma pasta de modelos e dentro dela, cada arquivo.py de um modelo específico. Exemplo:
- models
- organic.py
- synthetic .py
- __init__.py
No arquivo __init__.py
de nosso pacote de modelos, iremos importar os arquivos.py de cada modelo que há na pasta:
from .organic import Person
from .synthetic import Robot
Com isso podemos facilmente importar as classes do nosso pacote de modelo da seguinte forma:
from .models import *
No curso Boas práticas no Django 2: apps, pastas e paginação, na aula 3 o professor cria uma estrutura de organização como essa para as views.
Porém, a importação explícita de cada modelo em vez de from .models import *
tem vantagens de evitar carregamentos desnecessários, além de tornar o código mais legível.
E para casos onde queremos manter a legibilidade e evitar o import geral, podemos utilizar imports explícitos, como abaixo:
from myapp.models.organic import Person
E nesse caso, o __init__.py
dentro da pasta de modelos poderá ser um arquivo vazio.
Vale ressaltar também que quando criamos um arquivo de modelos fora da pasta raiz, precisamos especificar a qual app aquele modelo pertence, e fazemos isso através do atributo app_label
:
class Person(models.Model):
name = models.CharField(max_length=100)
class Meta:
app_label = 'myapp'
Fico à disposição para qualquer dúvida. Abraços e bons estudos!