未创建自定义Model时Django迁移命令makemigrations和migrate生效原因问询
核心原因
Django 创建项目后生成的默认配置里,settings.py 的 INSTALLED_APPS 列表已经预先注册了多个官方内置应用,其中就包含负责身份认证的 django.contrib.auth 应用:
- 该内置应用本身已经封装了完整的
User模型、权限模型等数据结构,以及对应的迁移文件,不需要你自行定义相关Model - 你使用的
UserCreationForm是官方和内置User模型绑定的表单类,调用表单的save()方法时,本质是往内置User模型对应的数据库表写入数据 - 执行
makemigrations时会扫描所有已注册应用(包括所有内置预装应用)的模型变更,migrate会把所有应用的迁移规则同步到数据库生成对应表,因此哪怕你没有编写自定义Model,执行迁移命令也会自动生成auth相关的表,支撑用户数据的存储。
涉及的代码参考
你编写的视图代码如下:
from django.shortcuts import render from django.contrib.auth.forms import UserCreationForm # Create your views here. def homepage(request): return render(request,'homepage.html') def register(request): if request.method == 'POST': fm = UserCreationForm(request.POST) if fm.is_valid(): fm.save() fm = UserCreationForm() return render(request,'register.html',{'form':fm}) def login(request): return render(request,'login.html')
你执行的迁移命令如下:
py manage.py makemigrations py manage.py migrate py manage.py createsuperuser
内容的提问来源于stack exchange,提问作者amar gupta
相关产品推荐
相关产品推荐

