以前在我的一个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'),
),
]
因此,用户可以在我的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)
更新
根据我的评论,我还需要一个迁移,一个AlterField?
我是否还必须立即更新表my_client中的所有现有值,如果他们中的任何一个有韩国说未分配,如果我想删除韩国作为选择?我可以在迁移中使用什么命令?
答案 0 :(得分:1)
稍后想出来,希望它能帮助像我这样的其他初学者。
我必须更新客户端模型
class Client(MyAppModel):
TEAM_CHOICES = (
('Unassigned', 'Unassigned'),
('National', 'National'),
('NSW', 'NSW'),
('SA', 'SA'),
)
然后输入以下命令:
python manage.py makemigrations
将生成迁移:
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'),
),
]
接下来立即更新表中的所有现有值,引用here,输入此命令以创建空迁移文件:
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),
]
答案 1 :(得分:1)
高级方法:
创建仅添加新选择的迁移。编写一种方法以采用所有旧选择的模型,并为它们提供适当的新选择migration.RunPython
。创建一个删除旧选择的迁移。