Se você está em modo de desenvolvimento e deseja apenas resetar tudo (banco de dados, migrações, etc), utilizo este script baseado na resposta de Abdelhamid Ba. Isso limpará as tabelas do banco de dados (Postgres), excluirá todos os arquivos de migração, executará novamente as migrações e carregará meus acessórios iniciais:
#!/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"
arquivo 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 $$;
arquivo migration.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py makemigrations
./manage.py migrate
arquivo load_initial_fixtures.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py loaddata ~/path-to-fixture/fixture.json
Apenas certifique-se de alterar os caminhos que correspondem ao seu aplicativo. Eu pessoalmente tenho esses scripts em uma pasta chamada project_root / script / local, e os fontes do django estão em project_root / src.