2012-01-12 10 views
6

Il mio progetto consiste in diverse applicazioni di django che devono essere distribuite in modo diverso, possibilmente su macchine diverse. Tuttavia spesso queste app necessitano occasionalmente di accedere ai rispettivi modelli, quindi stavo pensando di "esternalizzare" i miei modelli in modo che possano essere accessibili in modo più elegante da qualsiasi app. Così l'idea è di fare avere una struttura di directory simile a qualcosa di simile:È buona pratica di programmazione separare i modelli dal resto dell'applicazione

/ 
+ application1 
+ application2 
+ models 

C'è un punto funzionale farlo (diverso dal codice manutenibilità), dal momento che le applicazioni possono attraversare riferimento l'un l'altro?

+1

difficile da dire. riesci a pensare ad un lato negativo? si confondeva con tutti i modelli intermixati in una cartella? – dqhendricks

+1

@dqhendricks: No, non proprio. Infatti, probabilmente sarebbe più facile da gestire dato che avremmo un unico punto di messa a fuoco per l'interfaccia del database ... – Goro

+1

I modelli ** all'interno delle app ** possono dipendere l'uno dall'altro correttamente. Perché provare ad estrarre i modelli? Cosa è "più elegantemente"? 'da app.models import This, That' sembra piuttosto elegante. Come potresti migliorare su questo? –

risposta

4

il seguente paragrafo nella django book mi fa pensare che questo non è probabilmente una buona idea (ho aggiunto la formattazione in grassetto):

Tuttavia, c'è un requisito per quanto riguarda la convenzione di applicazione: se si sta utilizzando Django di livello database (modelli), è necessario creare un'app Django. I modelli devono vivere all'interno delle app. Pertanto, per iniziare a scrivere i nostri modelli, dovremo creare una nuova app.

+1

Come si deduce dalla citazione che i modelli devono vivere nella _ stessa app in cui vengono utilizzati? Non potrebbe esserci solo un'app di modelli? – aaronasterling

+0

La lettera della legge a volte è diversa dallo spirito dietro di essa. Potrebbe esserci un'app di modelli con un modello di modelli che conteneva tutti i modelli. Il punto è evitare l'app monolitica per mostri che contiene tutto ciò che contiene. Ma. Potresti, certamente, avere un'app con tutti i modelli e tutte le altre app sono solo raccolte di funzioni di visualizzazione. Ma questo non è lo * spirito * di Django. –

2

Non penso che sia un'idea particolarmente buona, anche se riesco a vedere l'appello. Includerai molti modelli che non utilizzi se desideri installare solo una delle tue app. Penso che sia meglio mantenere i modelli nell'app a cui si riferiscono maggiormente.

Ciò può anche rendere più confuso l'uso dell'interfaccia di amministrazione. Dove registri i modelli con l'amministratore? Dove esegui la personalizzazione dell'amministratore per un modello?

+0

Buon punto, ma penso che se fosse fatto correttamente, renderebbe le cose più ordinate: se spostassimo tutti i modelli nella loro app, potremmo avere l'amministratore su _that_ app, che comprende tutti i modelli. – Goro

3

Quanto segue non si adattava bene nei commenti a @ di jcollado risposta così mi metterò qui:

https://docs.djangoproject.com/en/dev/topics/db/models/#models-across-files

modelle attraverso i file

è perfettamente OK di mettere in relazione un modello a uno da un'altra app. Per fare ciò, importa il modello correlato nella parte superiore del modello che contiene il tuo modello. Quindi, basta fare riferimento all'altra classe del modello, laddove necessario. Per esempio:

from geography.models import ZipCode 

class Restaurant(models.Model): 
    # ... 
    zip_code = models.ForeignKey(ZipCode) 
Problemi correlati