Wenn Sie sich im Entwicklungsmodus befinden und einfach alles zurücksetzen möchten (Datenbank, Migrationen usw.), verwende ich dieses Skript basierend auf der Antwort von Abdelhamid Ba. Dadurch werden die Tabellen der Datenbank (Postgres) gelöscht, alle Migrationsdateien gelöscht, die Migrationen erneut ausgeführt und meine ersten Geräte geladen:
#!/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"
reset-db.sql Datei:
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 $$;
Datei migration.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py makemigrations
./manage.py migrate
Datei load_initial_fixtures.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py loaddata ~/path-to-fixture/fixture.json
Stellen Sie einfach sicher, dass Sie die Pfade so ändern, dass sie Ihrer App entsprechen. Ich persönlich habe diese Skripte in einem Ordner namens project_root / script / local, und die Quellen von django befinden sich in project_root / src.