Sto creando alcuni modelli dinamici Django nella mia applicazione e tutto sembra funzionare come previsto tranne che per il sistema di migrazione.Django 1.7 - makemigrations che creano la migrazione per il modello non gestito
Se creo un modello Django dinamico e impostato managed = False, il comando makemigrations
di Django genera ancora una migrazione per quel nuovo modello. La migrazione simile a questa:
class Migration(migrations.Migration):
dependencies = [
('atom', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='books',
fields=[
],
options={
'db_table': 'books',
'managed': False,
},
bases=(models.Model,),
),
]
Se io non creo la migrazione, quando corro python manage.py migrate
, vedo il seguente messaggio (in grandi lettere rosse spaventosi):
Your models have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
Is c'è un modo per dire al sistema di migrazioni in Django 1.7 di ignorare tutti i modelli non gestiti tutti insieme? o forse un'impostazione migrations = False
nella classe Meta dei modelli?
UPDATE: di chiarimenti, sto usando un metodo per creare i miei modelli dinamici simili a quelli di descrivere nei seguenti luoghi:
- http://dynamic-models.readthedocs.org/en/latest/topics/model.html#topics-model
- https://code.djangoproject.com/wiki/DynamicModels
Questo il metodo è ottimo per generare i miei modelli dinamici in base alle informazioni memorizzate nei miei modelli di configurazione (https://code.djangoproject.com/wiki/DynamicModels#Adatabase-drivenapproach). Dovevo registrare un segnale per cancellare la cache del modello django per rilevare le modifiche ai modelli quando viene modificata un'istanza di Configuration, ma tutto sembra funzionare alla grande, tranne per il fatto che le migrazioni sono generate per questi modelli. Se elimino una delle configurazioni e il modello viene eliminato dalla cache di Django, la migrazione dovrebbe essere nuovamente aggiornata, rimuovendo il modello che non dovrebbe interessare.
Questi modelli dinamici non sono utilizzati specificamente nell'applicazione. No dove nel codice faccio riferimento a un modello di libri (dall'esempio sopra). Vengono generati in fase di esecuzione e utilizzati per leggere le informazioni dalle tabelle legacy a cui forniscono l'accesso.
Ma la migrazione in realtà sta causando un problema? Cioè, quando esegui "migrate" crea erroneamente i modelli nel database? In caso contrario, non c'è davvero alcun problema. Il sistema di migrazione non riguarda solo le modifiche a livello di database, ma cerca di creare un'immagine più precisa possibile dei modelli nella memoria. –
Questo è corretto. Le migrazioni non stanno causando un problema. Tuttavia, in un sistema dinamico, dove ci sono potenzialmente nuovi modelli per tutto il tempo. Sarebbe bello se potessi indicare al sistema di migrazione che non ha bisogno di preoccuparsi di questi particolari modelli. – chadgh
Potresti fornirci maggiori dettagli su come vengono generati i tuoi modelli dinamici? Principalmente quali dati sono necessari per generarli dinamicamente. –