Pergunta

Eu estou tentando adicionar alguns dados para o banco de dados assim como a criação de tabelas, usando o post_syncdb sinal.

signals.post_syncdb.connect(init)

Em seguida, na função init, eu quero definir permissão, então eu uso

ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)

Mas se eu soltar todas as tabelas e executar syncdb, Eu recebo

...
File "...\base\functions\init.py", line 11, in init
  ct = ContentType.objects.get(app_label='news', model='Article')
...
django.contrib.contenttypes.models.DoesNotExist: ContentType matching query does not exist.

Alguns testes que eu fiz:

  • Ele funciona bem se eu tentar este código fora syncdb.
  • Ele também funciona bem se eu deixar syncdb criar todas as tabelas sem esse código e adicione esse código e executar syncdb sem ter que fazer quaisquer alterações.
  • E eu tenho certeza que ele costumava trabalhar, mas eu mudei um monte de coisas em outros lugares desde então, então eu não sei por onde começar.
  • Eu recebo o mesmo erro de outros modelos em aplicações diferentes.
  • O sinal é disparado cerca de 10 vezes, só as primeiras vezes que jogar o erro.

Muito obrigado por todas as sugestões!

Foi útil?

Solução

Adicionar este início de sua função de inicialização:

 from django.contrib.contenttypes.management import update_all_contenttypes
 update_all_contenttypes() # make sure all content types exist
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top