如果您想要完全重新开始,您需要删除数据库。这意味着您需要执行以下步骤:重新创建它,添加权限,重新生成所有迁移并重新运行它们。
好消息是,您可以很容易地将所有这些步骤合成一条或几条命令。
新的迁移文件
如果您删除整个文件夹,您需要运行“makemigrations”命令,并提及所有应用程序名称。如果您经常这样做,那么这会很麻烦。为了让Django看到需要迁移的应用程序,您应该保留migrations文件夹以及其中的__init__.py文件。
以下是一个 bash 命令:
find . -path "*migrations*" -not -regex ".*__init__.py" -a -not -regex ".*migrations" | xargs rm -rf
然后按照通常的方式操作(这将为之前有迁移的所有应用程序创建迁移):
python manage.py makemigrations
重置PostgreSQL数据库
在控制台中运行以下命令:
psql -c "drop database <db_name>;"
psql -c "create database <db_name>;"
psql -c "grant all on database <db_name> to <db_user>;"
最后,使用以下命令重新运行迁移:
python manage.py migrate
超级用户
显然,您将缺少一个超级用户,因此您可能还需要执行以下操作:
python manage.py createsuperuser
没有输入的方法是将Python代码传送到shell中执行:
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'badmin@myproject.com', 'pa$$w0rd')" | python manage.py shell
一般来说,关于这些非常常见的操作 - 自己动手写点bash吧。在多年与不仅限于Django的工作中,它为我节省了许多累积的时间。因为比单行命令更好的是,拥有一个存储更多这些方便函数的整个实用文件。然后你就可以只运行类似这样的东西:
django --reset_migrations
db --reset <my_db>
django --migrate
如果你发现自己一直在重复同样的几个操作,甚至可以将它们聚合成一行。
reset_django() {
find . -path "*migrations*" -not -regex ".*__init__.py" -a -not -regex ".*migrations" | xargs rm -rf
python manage.py makemigrations
psql -c "drop database <db_name>;"
psql -c "create database <db_name>;"
psql -c "grant all on database <db_name> to <db_user>;"
python manage.py migrate
echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'badmin@myproject.com', 'pa$$w0rd')" | python manage.py shell
}
我的灵感工具
#!/bin/bash
django() {
project_name=$(basename $PWD)
project_path="$PWD"
manage_path="${project_path}/${project_name}/manage.py"
if [ ! -f $manage_path ] ; then
echo "Error: Could not locate Django manage.py file."
return -1
fi
if [ $# -eq 0 ] ; then
echo "Django project detected."
fi
while [ ! $# -eq 0 ]
do
case "$1" in
--help | -h)
echo "Django shortcut, unknown commands are forwarded to manage.py"
echo " -c, --check Run Django manage.py check."
echo " --req Install requirements."
echo " -r, --run Run server."
echo " -s, --shell Run Django shell plus."
echo " -sd, --shell Run Django shell plus. Debug DB (print sql)"
echo ""
;;
--check | -c)
python $manage_path check
;;
--shell | -s)
python $manage_path shell_plus --bpython
;;
--shell | -sd)
python $manage_path shell_plus --bpython --print-sql
;;
--run | -r)
python $manage_path runserver
;;
--req)
pip install -r $project_path/requirements.txt
;;
--mig | -m)
python $manage_path makemigrations
python $manage_path migrate
;;
--reset_migrations)
find . -path "*migrations*" -not -regex ".*__init__.py" -a -not -regex ".*migrations" | xargs rm -rf
python $manage_path makemigrations
;;
*)
python $manage_path "$@"
;;
esac
shift
done
}