【问题标题】:Django migrations with foreign key带有外键的 Django 迁移
【发布时间】:2015-08-09 19:31:52
【问题描述】:

我正在尝试迁移此模型:

class Questionpart_image(models.Model):
    questionpart = models.ForeignKey(Questionpart, null=True, blank=True)
    image = models.ImageField()

到这里:

class Questionpart_image(Questionpart): # notice this base class
    image = models.ImageField()

利用继承。 Django 产生以下迁移:

class Migration(migrations.Migration):

dependencies = [
    ('ochsite', '0016_auto_20150809_1903'),
]

operations = [
    migrations.RemoveField(
        model_name='questionpart_image',
        name='id',
    ),
    migrations.RemoveField(
        model_name='questionpart_image',
        name='questionpart',
    ),
    migrations.AddField(
        model_name='questionpart_image',
        name='questionpart_ptr',
        field=models.OneToOneField(default='', primary_key=True, to='ochsite.Questionpart', serialize=False, parent_link=True, auto_created=True),
        preserve_default=False,
    ),
]

但这不会从questionpart 字段将正确的外键设置为questionpart_ptr。我怎样才能做到这一点?
找了好久,还是没有。。。谢谢

【问题讨论】:

    标签: python django migration


    【解决方案1】:

    不要依赖自动迁移,自己制作或修改那个。

    最简单的解决方案是将迁移中的AddField 移动到列表顶部并在它和RemoveFields RunPython 块之间注入,该块会将id 从旧字段重写为新字段(以及相反的其他方向,如果需要)。

    【讨论】:

    • 谢谢,我最终创建了全新的模型、迁移数据并删除了旧模型。这有点复杂,但它是安全的。
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2013-06-11
    • 2019-03-22
    • 2015-02-19
    • 2016-11-13
    相关资源
    最近更新 更多