Django CharField,选择和迁移

jTi*_*Key 4 django

由于某种原因,当该字段未更改时,Django 要求我随机迁移。迁移文件是相同的。

模型:

PROGRESS_CHOICE = {
        ('1', '1.start'),
        ('2', '2.driver_arrived_pick_up'),
        ('3', '3.hope_in'),
        ('4', '4.driver_arrived_destination'),
        ('5', '5.end')
    }

    progress = models.CharField(max_length=20, choices=PROGRESS_CHOICE, default=1, blank=True)
Run Code Online (Sandbox Code Playgroud)

迁移:1。

class Migration(migrations.Migration):
    dependencies = [
        ('api', '0031_auto_20150603_1515'),
    ]

    operations = [
        migrations.AlterField(
            model_name='ride',
            name='progress',
            field=models.CharField(max_length=20, default=1, blank=True, choices=[('1', '1.start'), ('3', '3.hope_in'), ('4', '4.driver_arrived_destination'), ('2', '2.driver_arrived_pick_up'), ('5', '5.end')]),
            preserve_default=True,
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

2.

class Migration(migrations.Migration):
    dependencies = [
        ('api', '0032_auto_20150603_1734'),
    ]

    operations = [
        migrations.AlterField(
            model_name='ride',
            name='progress',
            field=models.CharField(default=1, max_length=20, choices=[('1', '1.start'), ('4', '4.driver_arrived_destination'), ('5', '5.end'), ('3', '3.hope_in'), ('2', '2.driver_arrived_pick_up')], blank=True),
            preserve_default=True,
        ),
    ]
Run Code Online (Sandbox Code Playgroud)

alT*_*Tus 6

它发生是因为PROGRESS_CHOICE已经有一段dict时间了,它一定是 alist或更好的 a tuple

PROGRESS_CHOICES = (
    ('1', '1.start'),
    ('2', '2.driver_arrived_pick_up'),
    ('3', '3.hope_in'),
    ('4', '4.driver_arrived_destination'),
    ('5', '5.end'),
)
Run Code Online (Sandbox Code Playgroud)

CharFieldchoices接受任何可迭代,因此它可以工作,但dict不保留顺序,因此每次进行迁移时,它都会在转换为列表时随机洗牌。