Estoy tratando de sincronizar datos entre dos instalaciones de django (producción y prueba). Estoy haciendo esto usando ./manage.py dumpdata --natural
en producción, luego ./manage.py loaddata
en una base de datos recientemente actualizada syncdb
'en pruebas.Django: elimine todos los datos de todas las tablas (pero conserve las tablas)
Todo funcionaba bien hasta que agregué un nuevo permiso personalizado. La producción syncdb
cargó este nuevo permiso en un orden diferente (con una clave primaria diferente) que un nuevo syncdb
en una base de datos vacía. En consecuencia, obtiene una ID diferente. Así que a pesar de utilizar claves naturales, cuando intento cargar los datos, estoy recibiendo este error cuando se carga el primer objeto de permiso fuera de orden:
IntegrityError: duplicate key value violates unique constraint "auth_permission_content_type_id_codename_key"
La forma más sencilla que puedo pensar para solucionar este problema es eliminar todos los datos de cada tabla en la instalación de prueba, es decir, usar syncdb
solo para crear tablas, y para no cargar también los datos iniciales. Pero syncdb
no le permite omitir el paso de datos/señales iniciales. En vez de enumerar explícitamente cada modelo o nombre de tabla, ¿cómo puedo eliminar todos los datos iniciales después de llamar al syncdb
? ¿O hay una manera de crear solo las tablas vacías sin usar syncdb
?
./manage.py flush
no es lo que busco: recarga los datos iniciales y activa las señales syncdb.
restablecer está en desuso, como mencionan los documentos que enlaza; pero requiere que enumere cada aplicación, lo cual quiero evitar. Flush es su reemplazo; pero carga datos iniciales. – user85461
obsoleto no significa que no pueda usarlo. Si no quiere enumerar los nombres de las aplicaciones, creo que tendrá que escribir su propio comando de administración. – Alasdair
Se elimina en 1.5. desafortunadamente, no parece que haya una manera de limpiar una sola aplicación más :( – Andre