Nếu bạn đang ở chế độ phát triển và bạn chỉ muốn đặt lại mọi thứ (cơ sở dữ liệu, di chuyển, v.v.), tôi sử dụng tập lệnh này dựa trên câu trả lời của Abdelhamid Ba. Thao tác này sẽ xóa các bảng của cơ sở dữ liệu (Postgres), xóa tất cả các tệp di chuyển, chạy lại quá trình di chuyển và tải các đồ đạc ban đầu của tôi:
#!/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"
tệp 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 $$;
tệpigration.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py makemigrations
./manage.py migrate
tệp load_initial_fixtures.sh:
#!/usr/bin/env bash
cd ../../src
./manage.py loaddata ~/path-to-fixture/fixture.json
Chỉ cần đảm bảo thay đổi các đường dẫn để tương ứng với ứng dụng của bạn. Cá nhân tôi có các tập lệnh này trong một thư mục có tên là project_root / script / local và các nguồn của django nằm trong project_root / src.