Как я могу "протравить" экземпляры моделей 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')])