整理学习Django过程中遇到的问题
如何新建用户
- 新建超级用户
python manage.py createsuperuser
在命令行中依次输入用户名、邮箱地址(选填,可为空)、密码、二次确认密码即可,命令行中输入密码不会显示*号,确保两次输入的密码相同。密码过短或是与账户名相同会出现提示,直接输入y即可强行生成。
- 新建普通用户
python manage.py shell
直接使用 Django 的 shell 命令对用户进行新建,具体操作如下
>>>from django.contrib.auth.user import User
>>>user = User.objects.create_user('用户名', '邮箱地址', '密码')
>>>user.save()
邮箱地址可以为空,此方法适用于 Django 3.2 ,官方说明文档在此
数据库迁移相关报错
ProgrammingError: relation “django_content_type” already exists. 报错
在 Django 1.8 以后的版本中,可以使用虚拟初始化的方式,将已经存在的数据库表进行跳过操作,使用方法为:
python manage.py migrate --fake-initial
可以跳过所有已经生成的表,继续生成其他未生成的表。官方说明文档在此
项目迁移后不生成表(无法根据模型生成表,无法检测到数据库修改)
一般常见于直接删除数据库文件,正常删除数据库应按照以下顺序:
- 删除数据库中的表,使用
drop table
命令。 - 注释掉
model.py
文件中不需要的模型。 - 生成新的迁移文件并执行
python manage.py makemigration
,python manage.py migrate
其他情况下删除数据库可能出现无法生成表的问题,按照如下顺序排查问题:
- 删除应用下
migrations
文件夹中除了__init__.py
以外的所有文件。 - 使用工具打开目录中的
db.sqlite3
,找到django_migration
表,并删除表中的所有数据 - 重新使用命令生成迁移文件并执行
python manage.py makemigration
,python manage.py migrate
其中 macOS 可以使用自带的终端功能对数据库进行修改
>>>sqlite3 数据库所在路径
>>>.table #用于查看所有的表
>>>delete * from django_migrations; #注意分号不能漏,执行完毕后即删除所有的迁移记录