ContentType correspondência de consulta não existe no post_syncdb
-
12-12-2019 - |
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!
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