Django приборы предоставляют механизм для импорта данных на syncdb
. Тем не менее, выполнение начального распространения данных часто проще с помощью кода Python. Техника, которую вы изложите, должна работать либо через syncdb, либо через команду управления. Например, через syncdb, в my_app/management.py
:
def init_data(sender, **kwargs):
for i in range(1000):
MyModel(number=i).save()
signals.post_syncdb.connect(init_data)
Или в команде управления в myapp/management/commands/my_command.py
:
from django.core.management.base import BaseCommand, CommandError
from models import MyModel
class MyCommand(BaseCommand):
def handle(self, *args, **options):
if len(args) > 0:
raise CommandError('need exactly zero arguments')
for i in range(1000):
MyModel(number=i).save()
Затем вы можете экспортировать эти данные в прибор или продолжить импорт с помощью команды управления. Если вы решите продолжать использовать сигнал syncdb
, вам нужно будет условно запустить функцию init_data
, чтобы предотвратить импорт данных при последующих вызовах syncdb
. Когда фиксации недостаточно, мне лично нравится делать и то и другое: создавать команду управления для импорта данных, но первый вызов syncdb
выполняет импорт автоматически. Таким образом, развертывание становится более автоматизированным, но я все еще могу легко внести изменения в исходные данные и повторно запустить импорт.