Cuando intento eliminar a un usuario de la aplicación de autenticación integrada de Django, tengo este error: django.db.utils.OperationalError: no such table: main.auth_user__old

Busqué en la web y encontré esta pregunta: Django: no existe tal tabla: main.auth_user__old Así que actualicé Django y ahora estoy usando la versión 3.2.4 (estoy usando sqlite). Luego traté de eliminar las tablas de autenticación de la base de datos, pero cuando hice un ptyhon manage.py makemigrations auth, me dijo que no se detectaron cambios. Además, no puedo eliminar toda la base de datos.

¿Alguien tiene una idea de lo que puedo hacer para solucionar esto?

respuesta

No debería eliminar tablas manualmente mientras usa Django. Django agrega una tabla adicional a la base de datos llamada django_migrationsy en esta tabla Django realiza un seguimiento de las migraciones que se aplican. Cuando elimina cosas manualmente, su entrada aún permanece en esta tabla y, por lo tanto, no puede aplicar migraciones.

La forma más sencilla de hacer lo que desea es revertir las migraciones migrando a una migración anterior especificando el nombre de la migración:

python manage.py [app_label] [migration_name]

Puede usar zerocomo migration_namepara revertir todas las migraciones. Si supongamos que ya ha cambiado las cosas manualmente, puede usar la --fakebandera para falsificar las migraciones (lo que simplemente marcará/desmarcará las migraciones como aplicadas). Teniendo en cuenta que ya eliminó las tablas, puede usar el siguiente comando:

python manage.py migrate auth zero --fake

Para más información sobre el migratecomando puedes leer la documentación .