Pergunta

como eu normalmente não fazer o up design frente dos meus modelos em projetos Django I acabam modificando os modelos de um monte e, assim, eliminar o meu banco de dados de teste de cada vez (porque "syncdb" nunca vai alterar as tabelas automaticamente vocês). Abaixo encontra-se o meu trabalho e eu gostaria de ouvir sobre o seu. Quaisquer pensamentos boas-vindas ..

  1. Modificar o modelo.
  2. Excluir o banco de dados de teste. (Sempre um banco de dados SQLite simples para mim.)
  3. Executar "syncdb".
  4. Gerar alguns dados de teste por meio de código.
  5. Goto 1.

A questão secundária em relação a este .. No caso do seu fluxo de trabalho é como acima, como você executar o passo 4.? Você gerar os dados de teste manualmente ou há um ponto de gancho adequado no Django aplicativos onde você pode injetar o gerador de código-dados de teste na inicialização do servidor? \

TIA.

Foi útil?

Solução

Passos 2 e 3 pode ser feito em uma única etapa:

manage.py reset appname

Passo 4 é mais facilmente gerido, a partir de minha compreensão, usando luminárias

Outras dicas

Este é um trabalho para luminárias do Django. Eles são convenientes porque eles são independentes banco de dados eo equipamento de teste (e manage.py) têm suporte embutido para eles.

Para usá-los:

  1. Configure seus dados em seu aplicativo (chamada -lo "foo"), utilizando a ferramenta de administração
  2. Crie um diretório luminárias em sua "Foo" diretório app
  3. Tipo: python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json

Agora, depois de o seu estágio syncdb, basta digitar:

 python manage.py loaddata foo.json

E seus dados será recriado.

Se você quer que eles em um caso de teste:

class FooTests(TestCase):
    fixtures = ['foo.json']

Note que você terá de recriar ou atualizar manualmente seus dispositivos elétricos se seu esquema muda drasticamente.

Você pode ler mais sobre luminárias nos docs django para Fixação Carregando

Aqui está o que fazer.

  1. Aplicativos são nomeados com um número de versão do esquema. appa_2, appb_1, etc.

  2. alterações

    Menores não alterar o número.

  3. As alterações importantes incremento do número. Syncdb funciona. E um script "migração de dados" pode ser escrito.

    def migrate_appa_2_to_3():
        for a in appa_2.SomeThing.objects.all():
            appa_3.AnotherThing.create( a.this, a.that )
            appa_3.NewThing.create( a.another, a.yetAnother )
        for b in ...
    

O ponto é que eliminar e recriar nem sempre é apropriado. Às vezes é útil para mover dados formam o modelo antigo para o novo modelo sem reconstruir a partir do zero.

Sul é o mais legal.

Embora boa ol de reset' funciona melhor quando os dados não importa.

http://south.aeracode.org/

Para adicionar a resposta de Matthew, eu muitas vezes também usam SQL personalizado para fornecer dados iniciais, como documentado aqui .

Django simplesmente procura por arquivos em <app>/sql/<modelname>.sql e corre-los após a criação de tabelas durante syncdb ou sqlreset. Eu uso SQL personalizada quando eu preciso fazer algo como populate minhas tabelas Django de outras tabelas do banco de dados não-Django.

Pessoalmente meu db de desenvolvimento é para um projeto que estou trabalhando agora é bastante grande, então eu uso dmigrations para criar db scripts de migração para modificar a db (em vez de aniquilar a toda db como eu fiz no início).

Edit: Na verdade, estou usando o Sul agora: -)

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