昨天我们说明了关於Field,今天我们要来说明的是migrate,这个部分是在每次我们在设定model、修改model之後,一定要做两个动作,让model的设定能够确实在资料库实现,这个动作非常重要。
首先我们先python manage.py makemigrations (app名称)
,如同指令的意思,这个动作是创建一个的migrate,这个migrate其实还是一个python档,里面记录着model的创建或者修改,我们可以来看看这张图
根据画面我们可以知道,我们在user\migrations底下创建了一个名为0001_initial.py,里面都是记录着model每次新增、修改的纪录。
我先带大家来看看我的0001_initial.py长甚麽样子
import django.contrib.auth.models
import django.contrib.auth.validators
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
('auth', '0012_alter_user_first_name_max_length'),
]
operations = [
migrations.CreateModel(
name='UserProfile',
fields=[
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')),
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('id', models.CharField(max_length=150, primary_key=True, serialize=False)),
('account', models.CharField(max_length=150)),
('phone', models.CharField(max_length=150)),
('password', models.CharField(max_length=150)),
('email', models.CharField(max_length=150)),
('createtime', models.DateTimeField(auto_now_add=True)),
('updatetime', models.DateTimeField(auto_now=True)),
('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')),
('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')),
],
options={
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
managers=[
('objects', django.contrib.auth.models.UserManager()),
],
),
]
密密麻麻有点长,简单介绍一下dependencies的意思是,依赖某个档案去做建立,意思是第二次的修改会依照第一次的创建的档案,有修改的内容再makemigrations,一样的内容不会再创建一次,只会新增修改的内容,再来底下opration的意思是建立一个名称UserProfile的model,有last_login变数名称为资料型态是时间的字段......等等,在後续如果有修改陆续会有0002、0003,里面也都是纪录新增或是修改model的内容。
简单介绍完後,紧接着我们python manage.py migrate (app名称)
,这个动作就是负责将上面创建的档案做执行,让model的设定能够确实地在资料库实现,还有更多migrate的说明,官方文件我也会摆在底下唷,这里补充一下这里的app名称可打可不打,如果跟我一样不打,就是专案底下所有的app的model.py都会一起应用唷。
这两个动作非常之重要,未来如果model有任何更动,切记一定要做
python manage.py makemigrations (app名称)
python manage.py migrate (app名称)
这里有官方文件,里面有对於migrate更详细的介绍唷。
今天介绍的migrate,大家在每次model不论是新增或修改後,一定要记得哦,非常之重要,明天我们接着就要进入介绍 admin.py的部分。
<<: Day07【CSS】特异性 Specificity(样式权重)
在上一篇我们已经安装好 rspec 也产出了 User model 接下来就开始尝试写测试搂! 我在...
好消息,我找到一个贴文跟一个影片,所以逛头盔这件事可以延後一点做: How to use Unity...
决定来摸Unreal Engine(UE)怎麽使用,经过Unity的下载後,其实Unreal的下载也...
语法解析器(Syntax Parser): A program that reads your co...
前言 今天是铁人赛的第十五天,终於要把前两天的爬虫程序整合到LineBot了 再次说明:这里不是手把...