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!

¿Fue útil?

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
scroll top