ContentType de consulta correspondiente no existe en post_syncdb
-
12-12-2019 - |
Pregunta
Estoy tratando de agregar agregar algunos datos a la base de datos, tan pronto como se crean tablas, el uso de la post_syncdb
de la señal.
signals.post_syncdb.connect(init)
A continuación, en la función init, quiero establecer el permiso, por lo que yo uso
ct = ContentType.objects.get(app_label='news', model='Article')
Permission(name='Approve articles', codename='can_approve_article', content_type=ct)
Pero si la dejo todas las tablas y ejecutar syncdb
, Tengo
...
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.
Algunas de las pruebas que he hecho:
- Funciona bien si pruebo este código fuera
syncdb
. - También funciona bien si me deja
syncdb
crear todas las tablas sin este código y, a continuación, agregue este código y ejecutar syncdb sin tener que hacer ningún cambio. - Y estoy bastante seguro de que usa para el trabajo, pero he cambiado un montón de cosas en otros lugares desde entonces, así que no sé por dónde empezar.
- Me sale el mismo error de otros modelos en diferentes aplicaciones.
- La señal se dispara unas 10 veces, sólo el primer par de veces tira el error.
Muchas gracias por las sugerencias!
Solución
Agregar esto al principio de su función init:
from django.contrib.contenttypes.management import update_all_contenttypes
update_all_contenttypes() # make sure all content types exist
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow