Pergunta

O que é a maneira correta de criar tipos de costume pgsql para Django aplicativo para que cada banco de dados de tempo é criado com syncdb, todos os tipos personalizados são criados antes de criar todas as tabelas (de modo que as tabelas podem usar esse tipo)?

Eu também uso django-evolution, mas isso não é uma solução adequada - ele é executado após syncdb. Eu posso imaginar fazendo uma solução alternativa como definir modelos com tipos de campo padrão e, em seguida, a criação de tipos e tipos de colunas alterando em evoluções, mas isso definitivamente não é agradável e tipo de obscuro ...

Qualquer idéia?

Foi útil?

Solução

Eu não acredito que há uma maneira de fazer isso no Django. Como você provavelmente sabe, há um sinal post_syncdb mas nenhum sinal para pre_syncdb.

Então, eu acho que há apenas duas opções: corte de sinal pre_syncdb em Django ou usar uma ferramenta de automação como Tecido .

Hacking seu próprio sinal pre_syncdb, mesmo que seja o caminho certo para fazer isso, provavelmente não vai ser simples e você tem que manter o patch cada nova versão Django.

Por outro lado, não é apenas uma ferramenta de automação como a tela simples, mas oferece outros benefícios para o seu projeto.

Como um exemplo, uma parte dos meus Looks Fabfile como:

def createdb():
    "Create a clean database"
    run('createdb --encoding=UNICODE $(db_name) -O $(db_owner) -U $(db_owner)')
    run('python manage.py syncdb --noinput')

Adicionar algo como isso pouco antes da syncdb:

run('psql -U $(db_owner) $(db_name) < app/sql/custom_types.sql')

e você deve ser bom para ir por apenas digitando:

$ fab createdb

ou

$ fab cluster createdb

para executar o comando em todas as máquinas listadas no seu ambiente chamada cluster.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top