2009-12-11 11 views
7

Dopo aver letto la risposta di monokrome a Where should Django manager code live?, ho deciso di dividere un grande models.py in file più piccoli e più gestibili. Sto utilizzando la struttura delle cartelleRefactor large model.py file nell'app Django

foodapp/ 
    models/ 
     __init__.py #contains pizza model 
     morefood.py #contains hamburger & hotdog models 

In __init__.py, importare i modelli da morefood.py con

from morefood import hamburger, hotdog 

Tuttavia, quando si esegue python manage.py syncdb, l'unico tavolo creata è foodapp_pizza - Di cosa ho bisogno per fai in modo che Django crei i tavoli per i modelli che ho importato da morefood.py?

+1

Ognuno ha idee diverse di quanto sia grande un file è "troppo grande, "ma in generale trovo che se un'app richiede il refactoring dei suoi models.py, ciò indica generalmente un'app che non sta facendo" una cosa sola "ed è l'app stessa che deve essere refactored in più app. Solo un pensiero. –

+0

Entrambe le risposte di seguito funzionano bene. Preferisco che il kibitzer sembri leggermente in grado di tenere tutti i modelli nella cartella dei modelli. Terrò d'occhio il biglietto (http://code.djangoproject.com/ticket/6961) menzionato nel post del blog menzionato da Baresi. – Alasdair

+0

@Carl - buon punto. In questo caso particolare, ho finito per dividere l'app in due. – Alasdair

risposta

3

Oppure, nei modelli morefood.py, aggiungere il seguente alla Meta:

class Meta: 
    app_label = 'foodapp' 

Poi syncdb funzionerà con la struttura esistente

7

Prova questo:

 
foodapp/ 
    __init__.py 
    models.py 
    /morefood 
     __init__.py 
     hamburger.py 
     hotdog.py 

e farlo in models.py:

from foodapp.morefood.hamburger import * 
from foodapp.morefood.hotdog import * 

come suggerito in this blogpost.

+1

La pubblicazione del blog ora è 404, ma questo articolo sembra essere lo stesso contenuto: http://www.justinlilly.com/this-and-that/fitures_model_subdir.html – scwagner