Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Models em arquivos separados

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?

1 resposta
solução!

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!