以前已将一个字段添加到我的 MySQL 表之一中:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-09-14 00:49
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('my_app', '0102_previous_migrations'),
]
operations = [
migrations.AddField(
model_name='my_client',
name='my_team',
field=models.CharField(choices=[('Unassigned', 'Unassigned'), ('ACT', 'ACT'), ('Korea', 'Korea'), ('National', 'National')], default='Unassigned', max_length=255, verbose_name='My Team'),
),
]
Run Code Online (Sandbox Code Playgroud)
因此用户可以在我的 UI 中选择上述选项,并将保存到表 my_client 中:
更改已部署,现在像我这样的初学者想要更改,即删除韩国并添加 2 个新选项:NSW 和 SA
我该怎么办?我需要再次迁移还是只需要更改模型中的这些选择?
我现在像这样在我的模型中使用它:
class Client(MyAppModel):
TEAM_CHOICES = (
('Unassigned', 'Unassigned'),
('ACT', 'ACT'),
('Korea', 'Korea'),
('National', 'National'),
)
DEFAULT_TEAM = 'Unassigned'
my_team = models.CharField(verbose_name='MyTeam', null=False, max_length=255, choices=TEAM_CHOICES, default=DEFAULT_TEAM)
Run Code Online (Sandbox Code Playgroud)
更新:
根据我的评论,我也需要迁移,AlterField?
我是否还必须立即更新 my_client 表中的所有现有值,如果他们中的任何一个让韩国说未分配,如果我想删除韩国作为一个选择?我可以在迁移中使用什么命令?
稍后弄清楚,希望它能帮助像我这样的初学者。
我必须更新客户端模型
class Client(MyAppModel):
TEAM_CHOICES = (
('Unassigned', 'Unassigned'),
('National', 'National'),
('NSW', 'NSW'),
('SA', 'SA'),
)
Run Code Online (Sandbox Code Playgroud)
然后输入这个命令:
python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)
将生成迁移:
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('my_app', '0102_previous_migrations'),
]
operations = [
migrations.AlterField(
model_name='my_client',
name='my_team',
field=models.CharField(choices=[('Unassigned', 'Unassigned'), ('ACT', 'ACT'), ('National', 'National'), ('NSW', 'NSW'), ('SA', 'SA')], default='Unassigned', max_length=255, verbose_name='My Team'),
),
]
Run Code Online (Sandbox Code Playgroud)
接下来,要立即更新表中的所有现有值(请参阅此处),请输入以下命令以创建空迁移文件:
python manage.py makemigrations --empty my_app
在新的迁移文件中,输入如下内容:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2017-10-26 06:36
from __future__ import unicode_literals
from django.db import migrations
def set_unassigned(apps, schema_editor):
Client = apps.get_model('my_app', 'my_client')
for client in Client.objects.all():
client.account_team = 'Unassigned'
client.save()
class Migration(migrations.Migration):
dependencies = [
('my_app', '0104_client_team_update'),
]
operations = [
migrations.RunPython(set_unassigned),
]
Run Code Online (Sandbox Code Playgroud)