Как я могу "протравить" экземпляры моделей Django в базе данных в пример кода Python, который можно использовать для загрузки образцов данных?

Как я могу "протравить" экземпляры моделей Django в базе данных в пример кода Python, который можно использовать для загрузки образцов данных?

Я бы хотел:
1) Сделайте снимок нескольких сотен записей, которые я сохранил в базе данных MySQL для проекта Django
2) Возьмите этот снимок и измените данные в нем (исключив имена)
3) Преобразуйте эти данные в "маринованную строку" или фактический код Python, который я могу использовать для загрузки данных в новую учетную запись пользователя.

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

2 ответа

Решение

Простой способ сделать это - преобразовать модель в диктовку. Затем вы можете тривиально выбрать это, а затем снова накачать его, чтобы создать новые экземпляры модели.

Чтобы сохранить модель как диктовку, вы можете использовать встроенную функцию Django:

from django.forms.models import model_to_dict
my_dict = model_to_dict(my_instance,fields=[],exclude=[])

Как только вы преобразовали экземпляр в dict и отредактировали то, что необходимо, просто используйте обычный pickle.dumps а также pickle.loads методы для хранения и извлечения данных. Чтобы создать новый экземпляр модели, используя этот dict, вы можете сделать что-то вроде:

my_instance = MyModel(**my_dict)
#add any customization for the new instance here
my_instance.save()

На Django версии 1.8 и выше, если ваши модели имеют внешние ключи, вы можете использовать:

my_dict = dict([(f.attname, getattr(instance, f.attname))
               for f in instance._meta.get_fields()
               if hasattr(f, 'attname')])
Другие вопросы по тегам