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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top