【问题标题】:Django 1.11 - make column foreign key without deletingDjango 1.11 - 制作列外键而不删除
【发布时间】:2021-05-01 06:04:49
【问题描述】:

之前我们制作的整数字段如下:

cart_id = models.IntegerField(_('cart_id'), null=True)

但是现在我想把这个字段设为外键:

cart = models.ForeignKey(Cart, null=True, db_column='cart_id')

问题在于,在迁移过程中,它会生成两个删除字段和创建新字段的操作:

    operations = [
        migrations.RemoveField(
            model_name='order',
            name='cart_id',
        ),
        migrations.AddField(
            model_name='order',
            name='cart',
            field=models.ForeignKey(db_column=b'cart_id', to='cart.Cart', null=True),
            preserve_default=True,
        ),
    ]

有没有办法让它成为alter field?

【问题讨论】:

  • 尝试致电cart cart_id
  • @DMalan 它有效,但在这种情况下,我需要将此对象称为Order.cart_id。有没有办法让它Order.cart

标签: python mysql django django-models


【解决方案1】:

首先添加ForeignKey。设置默认 blank=True 并运行迁移。

然后运行这段代码来填充之前的实例(python manage.py shell):

m = Order.objects.all()
for i in m:
    c = Cart.object.get(id=i.cart_id)
    i.cart = c
    i.save()

完成后检查ForeignKey 是否填写在管理员中。 您可以删除ForeignKey 中的blank=True,这是必填字段。

【讨论】:

    猜你喜欢
    • 2012-08-05
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2017-10-11
    • 2012-09-21
    • 2015-06-11
    相关资源
    最近更新 更多