1

Каков правильный способ создания пользовательских типов pgsql для приложения django, так что каждая база данных создается с помощью syncdb, все созданные типы создаются до создания любых таблиц (так что таблицы могут используйте этот тип)?Правильный способ создания пользовательских типов pgsql в django

Я также использую django-evolution, но это не подходящее решение - оно запускается после syncdb. Я могу представить, как сделать обходной путь, например, определять модели со стандартными типами полей, а затем создавать типы и изменять типы столбцов в эволюции, но это определенно не приятно и вроде неясно ...

Любая идея?

ответ

1

Я не верю, что в Django есть способ сделать это. Как вы, наверное, знаете, есть сигнал post_syncdb, но нет сигнала для pre_syncdb.

Так что я думаю, что есть только два варианта: взломать pre_syncdb сигнал в Django или использовать инструмент автоматизации, например Fabric.

Взлом вашего собственного сигнала pre_syncdb, даже если это правильный способ сделать это, вероятно, будет непростым, и вы должны поддерживать патч каждый новый выпуск Django.

С другой стороны, это не только инструмент автоматизации, такой как ткань, но и другие преимущества для вашего проекта.

В качестве примера, часть моей 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.

+0

Да, я думал о взломе pre_syncdb - и я могу представить его как патч. Я также использую собственное git-репо для django, поэтому у меня нет проблем с сохранением моего набора патчей, пока они не будут в основном ... Я просто подумал, что может быть какой-то другой способ, но, видимо, его нет .. pre_syncdb выглядит вполне естественно, поэтому я, вероятно, поеду за ним. –

+0

Ну, я не Django, поэтому мой ответ не может быть авторитетным. Могут быть веские причины, по которым у них нет сигнала pre_syncdb, и может быть другой способ сделать это. Я задал вопрос о списке рассылки django-dev, прежде чем делать какое-либо кодирование. –

+0

http://code.djangoproject.com/ticket/11398 –

 Смежные вопросы

  • Нет связанных вопросов^_^