Django crea un nome di tabella unendo l'etichetta dell'app con il nome del modello. Un progetto può avere molte app. Se due hanno la stessa etichetta, come possono entrambi essere utilizzati nello stesso database?
Attualmente sto usando nomi di app molto lunghi per minimizzare il rischio (come foo_bar_baz
invece di moduli di nidificazione come foo.bar.baz
- label app baz
). Questo potrebbe essere eccessivo per un'app interna (cioè non inteso per il riutilizzo), ma ho anche alcuni moduli che sono generici e potrebbero essere utilizzati in diversi progetti (che sto rendendo disponibile gratuitamente su Internet, quindi la possibilità di scomporre il nome è più grande). Se qualcuno scarica i miei moduli, trova una collisione di nome con un'altra app di terze parti, ma non vuole modificare alcun codice (sarebbe un inferno di manutenzione) che cosa potrebbe fare al riguardo?
Ho pensato di eseguire il "patching scimmia" delle app per aggiungere un db_table
personalizzato a ciascun modello, o Django, per cambiare il modo in cui viene derivato il nome predefinito della tabella, o forse per garantire che ogni app utilizzi l'iniezione della dipendenza per fare riferimento ad altre app (così si può liberamente rinominare / collegare simbolicamente l'app senza rompere gli altri che dipendono da esso), ma tutte le opzioni sembrano un sacco di lavoro e / o troppo facilmente interrotte. C'è un modo più semplice? Devo eliminare tutto questo e continuare a usare nomi completi?