mysql - Django 迁移改变选择值

标签 mysql django

一个字段已经添加到我的一个 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 中的所有现有值?我可以在迁移中使用什么命令?

最佳答案

高级方法:

创建一个只添加新选择的迁移。编写一个方法来获取所有具有旧选择的模型,并为它们提供适当的新选择 migration.RunPython。创建删除旧选择的迁移。

关于mysql - Django 迁移改变选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46945013/

相关文章:

PHP , MYSQL 登录后才显示网站

mysql - 如何在 mysql 查询中将字符串转换为 bool 值?

php - 备份单行数据

django - 在特定时间段运行 celery 任务

javascript - 如何将 Django 模板中的内容替换为其他内容?

Django:在syncdb上强制表创建顺序

php - 难以理解 PDO bindValue 并执行

php - 从数据库中选择所有行,但某些行包含定义的字符串

python - 如何使用 Django ORM 从子查询中进行选择?

javascript - 从 Django 模型创建 javascript 对象(类)