Почему бы не использовать прибор?
django-admin loaddata fixture [fixture ...]
или
python manage.py loaddata fixture <file>
Редактировать:
Хорошо, поэтому вы делаете 2 очка:
- В базе данных должна быть история.
- Сигналы не должны запускаться.
точка 1:
Поскольку loaddata
использует не Модель для создания экземпляров и сохранения их, я не знаю, как это обрабатывает историю. Может быть, кто-то еще может взвесить здесь?
пункт 2:
что касается сигналов, это то, как вы избегаете срабатывания сигналов при загрузке приборов, как описано в официальном официальном django документация:
При обработке файлов фикстуры данные сохраняются в базе данных как есть. Определенные моделью методы save () не вызываются, и любые сигналы pre_save или post_save будут вызываться с raw = True, поскольку экземпляр содержит только атрибуты, локальные для модели. Например, вы можете захотеть отключить обработчики, которые обращаются к связанным полям, которые отсутствуют во время загрузки осветителя и в противном случае вызвала бы исключение:
from django.db.models.signals import post_save
from .models import MyModel
def my_handler(**kwargs):
# disable the handler during fixture loading
if kwargs['raw']:
return
...
post_save.connect(my_handler, sender=MyModel)