Sto provando a sincronizzare i dati tra due installazioni di django (produzione e test). Lo faccio utilizzando ./manage.py dumpdata --natural
in produzione, quindi ./manage.py loaddata
in un nuovo database syncdb
'testing'.Django: Rimuovi tutti i dati da ogni tabella (ma mantieni i tavoli)
Tutto funzionava bene fino a quando non ho aggiunto un nuovo permesso personalizzato. La produzione syncdb
ha caricato questa nuova autorizzazione in un ordine diverso (con chiave primaria diversa) rispetto a una nuova syncdb
su un database vuoto. Di conseguenza, ottiene un ID diverso. Quindi, nonostante l'uso di chiavi naturale, quando tento di caricare i dati, sto ottenendo questo errore quando il primo oggetto autorizzazione out-of-order è caricato:
IntegrityError: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_key"
Il modo più semplice che posso pensare di risolvere questo problema è quello di rimuovere tutti i dati da ogni tabella nell'installazione di test, ovvero utilizzare syncdb
solo per creare tabelle e non caricare anche i dati iniziali. Ma lo syncdb
non consente di saltare il passaggio iniziale di dati/segnali. A parte l'enumerazione esplicita di ogni modello o nome di tabella, come posso rimuovere tutti i dati iniziali dopo aver chiamato syncdb
? O c'è un modo per creare solo le tabelle vuote senza usare syncdb
?
./manage.py flush
non è quello che sto cercando: ricarica i dati iniziali e attiva i segnali syncdb.
reset è deprecato, come i documenti che si collega menzionare; ma richiede di enumerare ciascuna app, che voglio evitare. Flush è la sua sostituzione; ma carica i dati iniziali. – user85461
deprecato non significa che non puoi usarlo. Se non vuoi enumerare i nomi delle app, penso che dovrai scrivere il tuo comando di gestione. – Alasdair
È rimosso in 1.5. purtroppo non sembra che ci sia un modo per svuotare una singola app :( – Andre