2011-11-29 8 views
26

È possibile filtrare in modo selettivo i record in uscita dal comando di gestione dumpdata di Django? Ho alcuni modelli, ognuno con milioni di righe, e voglio solo scaricare i record in un modello che soddisfa un criterio specifico, così come tutti i record collegati a chiave esterna che fanno riferimento a uno di quei record.Django Selective Dumpdata

Considerare questo caso d'uso. Supponiamo di avere un database di produzione in cui il mio modello utente ha milioni di record. Ho diversi altri modelli (Log, Transazioni, Acquisti, Segnalibri, ecc.) Che fanno riferimento al modello Utente. Voglio fare lo sviluppo sulla mia app Django e voglio testare usando dati realistici. Tuttavia, il mio database di produzione è così enorme, non riesco realisticamente a scattare un'istantanea dell'intera cosa e caricarla localmente. Quindi, idealmente, vorrei utilizzare dumpdata per scaricare 50 record utente casuali e tutti i record correlati a JSON e usarlo per compilare un database di sviluppo.

C'è un modo semplice per realizzare questo?

+1

Buona domanda. E a volte vuoi anche rimuovere alcuni campi (come password e così via) se vuoi rendere pubblici questi dati di test. – Mitar

risposta

16

Penso che lo django-fixture-magic possa valere la pena dare un'occhiata.

Troverete alcune informazioni di base aggiuntive in Scrubbing your Django database.

+0

Ho dovuto modificare questo codice un po ', e anche in questo caso è un po' inefficiente, ma questo generalmente funziona per me. – Cerin

+0

sì, anche io: https://github.com/davedash/django-fixture-magic/issues/45 – daigorocub

3

Questa non è una semplice risposta alla mia domanda, ma ho trovato alcuni documenti interessanti su natural keys feature integrato di Django, che consentirebbe di rappresentare i record serializzati senza la chiave primaria. Sfortunatamente, non sembra che questo sia completamente integrato nei dumpdata, e c'è un vecchio outstanding ticket che si basa completamente su chiavi naturali.

Sembra inoltre che la funzione serializers.serialize() consenta la serializzazione di un elenco arbitrario di istanze di modello specifiche.

Presumibilmente, se ho implementato un metodo natural_key() su tutti i miei modelli e poi ho chiamato serializers.serialize ([Users.objects.filter (criteri)]), dovrebbe avvicinarsi a realizzare ciò che voglio. Potrei dover scrivere una funzione per eseguire la ricerca per indicizzazione di tutti i riferimenti FK e includere quelli nell'elenco di oggetti passati a serialize().

5

Questo frammento potrebbe essere utile per voi (segue i rapporti e li serializza):

http://djangosnippets.org/snippets/918/

Si potrebbe usare anche quel comando la gestione e sovrascrivere i manager di default per qualsiasi modelli che si desidera tornare personalizzato set di query.

+1

fork fisso/aggiornato dello snippet sopra: https://djangosnippets.org/snippets/10506/ – tutuDajuju

Problemi correlati