Si está en modo de desarrollo y solo desea restablecer todo (base de datos, migraciones, etc.), uso este script basado en la respuesta de Abdelhamid Ba. Esto borrará las tablas de la base de datos (Postgres), eliminará todos los archivos de migración, volverá a ejecutar las migraciones y cargará mis accesorios iniciales:
#!/usr/bin/env bash
echo "This will wipe out the database, delete migration files, make and apply migrations and load the intial fixtures."
while true; do
read -p "Do you wish to continue?" yn
case $yn in
[Yy]* ) make install; break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
done
echo ">> Deleting old migrations"
find ../../src -path "*/migrations/*.py" -not -name "__init__.py" -delete
# Optional
echo ">> Deleting database"
psql -U db_user -d db_name -a -f ./reset-db.sql
echo ">> Running manage.py makemigrations and migrate"
./migrations.sh
echo ">> Loading initial fixtures"
./load_initial_fixtures.sh
echo ">> Done"
Archivo reset-db.sql:
DO $$ DECLARE
r RECORD;
BEGIN
-- if the schema you operate on is not "current", you will want to
-- replace current_schema() in query with 'schematodeletetablesfrom'
-- *and* update the generate 'DROP...' accordingly.
FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP
EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE';
END LOOP;
END $$;
archivo migration.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py makemigrations
./manage.py migrate
archivo load_initial_fixtures.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py loaddata ~/path-to-fixture/fixture.json
Solo asegúrese de cambiar las rutas para que correspondan a su aplicación. Yo personalmente tengo estos scripts en una carpeta llamada project_root / script / local, y las fuentes de django están en project_root / src.