Вопрос

Могу ли я выполнить dumpdata в Джанго только для одной модели, а не для всего приложения, и если да, то как?

Для приложения это будет:

python manage.py dumpdata myapp

Однако я хочу, чтобы была сброшена какая-то конкретная модель, например «myapp.mymodel».Причина в том, что у меня есть несколько огромных, более 3 миллионов записей, наборов данных в одном приложении, которые мне не хотелось бы сбрасывать.

Это было полезно?

Решение

Начиная с версии 1.1 и выше, Django dumpdata Команда управления позволяет выгружать данные из отдельных таблиц:

./manage.py dumpdata myapp1 myapp2.my_model

Вы также можете разделить несколько приложений и моделей в командной строке.Вот каноническое определение:

django-admin dumpdata [app_label[.ModelName] [app_label[.ModelName] ...]]

Другие советы

Как уже отмечалось, вы не можете сделать это с помощью команды Manage.py в Django 1.0.Однако вы можете использовать скрипт для экспорта файла JSON и загрузить его, используя 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()

Я думаю, что у вас было решение в вашем вопросе.Вы можете сбросить отдельную модель следующим образом:

./manage.py dumpdata myapp.my_model

Перенесите все данные в формат json из модели django.

Синтаксис:

python manage.py dumpdata app_name.model_name

Для пример выгрузка данных из модели group_permission, которая находится в приложении аутентификации по умолчанию в django.

python manage.py dumpdata auth.group_permission

Для вывода посмотрите консоль.

Для успеха мне пришлось произнести это дважды и указать модель два раза, например:

./manage.py dumpdata myapp2.my_model myapp2.my_model

Если бы я только сказал

./manage.py dumpdata myapp2 myapp2.my_model

Меня завалило всеми моделями в myapp2, несмотря на то, что я указал my_model.

В качестве обходного пути вы можете создать другое приложение и скопировать модель, но указать ее на существующую таблицу с помощью мета-параметра db_table.Затем вы можете просто загрузить модели, которые вы скопировали, в новое приложение.Ваше существующее приложение не будет затронуто.

Я создал команду управления для создания приспособления для каждой модели.Фикстуры можно создать, запустив:

./manage generate_fixtures app.model.MyModel --file=dump/MyModel.json

код по адресу: https://gist.github.com/2394883

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top