19
Django – Separando Models por arquivo
Filed Under (Desenvolvimento) by Samir on 19-03-2010
Tagged Under : django
Uma dúvida muito comum sobre o ORM do Django é se existe a possibilidade de quebrar os models em partes menores, ou seja, separar um grupo de classes específicas e coloca-lás em um módulo Python.
Essa técnica pode ser útil conforme sua necessidade, se você possui uma app com muitos models, por ser interessante separa-lás por arquivo. Eu tive esse problema recentemente, procurei na net e achei uma forma interessante de fazer isso e principalmente, não quebrar a compatibilidade com as ferramentas externas, como o syncdb ou o south que utilizo bastante.
Sem muita enrolação, imagine a seguinte estrutura para um projeto:

Tendo a estrutura pronta, temos que editar os models de forma que o Django entenda nossa nova estrutura.
Por exemplo no arquivo financeiro.py da app2:
from django.db import models
class Financeiro(models.Model):
class Meta:
app_label = 'app2'
Observe que sou obrigado a informar explicitamente o nome da aplicação para cada model, sem isso o Django não consegue entender que essa classe pertence a aplicação app2.
E por último, no arquivos models.py de cada aplicação temos que importar as classes:
from app2.models_src.financeiro import Financeiro
Uma coisa muito importante que passei entender sobre o Django é que ele lhe dá muita flexibilidade para modificar sua estrutura e sobreescrever qualquer feature padrão, por tanto quanto melhor seu conhecimento em Python, melhores serão suas chances de extrair o máximo do framework.












Bacana isso aí. Querendo usar Python e Ruby para desenvolvimento de aplicações mobile/desktop do seu Mac Samir, saca esse projeto appcelerator.com.
Tu consegue criar umas paradas maneiras. Depois dá um bizu.
Cara, funcionou bem este esquema e ficou jóia !
Inclusive eu dividi as minhas views agora também… o que é bem mais simples. tipo no urls.py eu coloco o caminho do novo arquivo de views e pronto:
(‘^/index/$’,'minhapp.views_1.metodo’,….
(‘^/index2/$’,'minhapp.views_2.metodo’,….