dados despejo Django para um único modelo?
-
12-09-2019 - |
Pergunta
Posso executar uma dumpdata
em Django em apenas um único modelo, em vez de o aplicativo inteiro, e se sim, como?
Para um aplicativo seria:
python manage.py dumpdata myapp
No entanto, quero algum modelo específico, como "myapp.mymodel" a ser despejado. A razão de ser, tenho algumas enormes, 3 milhões de discos mais, conjuntos de dados no mesmo aplicativo que eu não gostaria despejado.
Solução
A partir da versão 1.1 e superior, o Django dumpdata
comando de gerenciamento permite que você despejar dados de tabelas individuais:
./manage.py dumpdata myapp1 myapp2.my_model
Você também pode separar vários aplicativos e modelos na linha de comando. Aqui está a definição canônica:
django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]
Outras dicas
Como se observa, você não pode fazer isso através de um comando manage.py no Django 1.0. No entanto, você pode usar um script para exportar o arquivo JSON, e carregá-lo usando loaddata
:
from django.core import serializers
from myproject.myapp import models
data = serializers.serialize("json", models.MyModel.objects.all())
out = open("mymodel.json", "w")
out.write(data)
out.close()
Eu acho que você tinha a solução na sua pergunta. Você pode despejar um modelo individual como este:
./manage.py dumpdata myapp.my_model
Tome todos os dados em formato JSON de Django modelo.
Sintaxe:
python manage.py dumpdata app_name.model_name
Para exemplo despejar dados do modelo group_permission que residem no aplicativo de autenticação padrão no Django.
python manage.py dumpdata auth.group_permission
Para saída de dar uma olhada em consola .
Para o sucesso que eu tinha que dizer isso duas vezes, e especificar o modelo de duas vezes, como:
./manage.py dumpdata myapp2.my_model myapp2.my_model
Se eu só disse
./manage.py dumpdata myapp2 myapp2.my_model
Eu fui inundado com todos os modelos MyApp2, apesar do fato de que eu especificado my_model.
Como alternativa, você poderia fazer um outro app e copiar o modelo, mas apontá-lo para a tabela existente com a opção meta db_table. Então você pode simplesmente despejar os modelos que você copiados para o novo aplicativo. Você aplicativo existente não seriam afetados.
Eu criei um comando de gerenciamento da geração de um dispositivo elétrico em uma base por modelo. Luminárias podem ser gerados executando:
./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json
código em: https://gist.github.com/2394883