Подтвердить что ты не робот

Django Selective Dumpdata

Можно ли выборочно фильтровать, какие записи команды управления дампадами Django выведены? У меня есть несколько моделей, каждая из которых имеет миллионы строк, и я хочу просто записывать записи в одной модели, соответствующие конкретным критериям, а также все связанные с внешним ключом записи, ссылающиеся на любую из этих записей.

Рассмотрим этот прецедент. Скажем, у меня была производственная база данных, где у моей модели User миллионы записей. У меня есть несколько других моделей (журнал, транзакция, покупка, закладки и т.д.), Все ссылающиеся на модель пользователя. Я хочу сделать разработку в своем приложении Django, и я хочу протестировать, используя реалистичные данные. Однако моя производственная база данных настолько огромна, что я не могу реалистично сделать снимок всей вещи и загрузить ее локально. Поэтому я хотел бы использовать дампдаты для сброса 50 случайных записей пользователя и всех связанных записей в JSON и использовать их для заполнения базы данных разработки.

Есть ли простой способ сделать это?

4b9b3361

Ответ 2

Этот фрагмент может быть полезен для вас (он следует за отношениями и сериализует их):

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

Вы также можете использовать эту команду управления и переопределить менеджеров по умолчанию для любых моделей, которые хотели бы вернуть пользовательские запросы.

Ответ 3

Это не простой ответ на мой вопрос, но я нашел несколько интересных документов о встроенной функции Django функции естественных клавиш, которая позволяют представлять сериализованные записи без первичного ключа. К сожалению, не похоже, что это полностью интегрировано в dumpdata, и есть старый выдающийся билет, чтобы полностью полагаться на естественные ключи.

Также кажется, что функция serializers.serialize() позволяет сериализовать произвольный список конкретных экземпляров модели.

Предположительно, если бы я применил метод natural_key() для всех своих моделей, а затем вызвал serializers.serialize([Users.objects.filter(критерии)]), он должен приблизиться к выполнению того, что я хочу. Возможно, мне придется написать функцию для обхода всех ссылок FK и включить их в список объектов, переданных в serialize().