Я не верю, что в Джанго есть способ сделать это. Как вы, вероятно, знаете, есть сигнал post_syncdb
, но нет сигнала для pre_syncdb
.
Так что я думаю, что есть только два варианта: взломать pre_syncdb
сигнал в Django или использовать такой инструмент автоматизации, как Fabric .
Взлом вашего собственного pre_syncdb
сигнала, даже если это правильный способ сделать это, вероятно, будет непростым, и вам придется поддерживать патч каждый новый выпуск Django.
С другой стороны, это не только простой инструмент для автоматизации, как Fabric, но и другие преимущества для вашего проекта.
Например, часть моего Fabfile выглядит так:
def createdb():
"Create a clean database"
run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
run('python manage.py syncdb --noinput')
Добавьте что-то вроде этого непосредственно перед syncdb:
run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')
и вам будет хорошо, просто набрав:
$ fab createdb
или
$ fab cluster createdb
для запуска команды на всех машинах, перечисленных в вашей среде, которая называется cluster
.