尝试执行迁移时模型的未处理挂起操作

2024-06-07 16:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

当我在我的一个项目应用程序上执行迁移时,会出现以下错误:

值错误:未处理的模型挂起操作: common.shipmentaddress(按字段引用:catalog.Fulfillment.address)

Django 1.9,python 2.7.10版本

我在找循环进口,但我不认为是这样

这些是模型:

class ShipmentAddress(models.Model):
    recipient_first_name = models.CharField(max_length=50, null=True, blank=True)
    recipient_last_name = models.CharField(max_length=50, null=True, blank=True)
    street_name = models.CharField(max_length=50)
    state = models.ForeignKey(State)
    postal_code = models.IntegerField(default=0)
    city = models.CharField(max_length=50)

    class Meta:
        db_table = 'shipment_address'


class Fulfillment(models.Model):
    address = models.ForeignKey(ShipmentAddress)
    inventory_items = models.ManyToManyField(Item_With_Size, through='Inventory_Item')

    class Meta:
        verbose_name = 'fulfilment'
        verbose_name_plural = 'fulfilments'
        db_table = 'fulfilment'

迁移看起来是这样的:

class Migration(migrations.Migration):

    dependencies = [
        ('catalog', '0009_auto_20151130_1118'),
     ]

    operations = [
        migrations.AlterField(
            model_name='fulfillment',
            name='address',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='common.ShipmentAddress'),
        ),
    ]

class Migration(migrations.Migration):

    dependencies = [
        ('common', '0005_shipmentaddress'),
    ]

    operations = [
        migrations.RenameField(
            model_name='shipmentaddress',
            old_name='recipient_name',
            new_name='recipient_first_name',
        ),
        migrations.AddField(
            model_name='shipmentaddress',
            name='recipient_last_name',
            field=models.CharField(blank=True, max_length=50, null=True),
        ),
    ]

Tags: nametrueaddressmodelsmigrationscommonmigrationnull
2条回答

对于那些重命名DjangoForeignKey中引用的模型的人,我为这个问题找到的另一个解决方案是在以后的迁移中重新定义该字段。这样可以避免编辑现有的迁移。

如果在第一次迁移中有以下操作(自动添加):

    migrations.AddField(
                model_name='my_model',
                name='my_fk',
                field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='my_app.old_model_name'),
            )

在将old_model_name重命名为new_model_name的迁移中,手动添加以下操作:

    migrations.AlterField(
                model_name='my_model',
                name='my_fk',                
                field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='my_app.new_model_name'),
            )

两者的区别在于调用AlterField,而不是AddField,并让toForeignKey字段中引用新的模型名称。

这是在Django 1.9.12测试的。

好的,我明白了!

似乎迁移过程覆盖了我以前的所有迁移,而不仅仅是最后一次迁移。。。在以前的迁移中,有一个错误的外键指针导致了这个问题

我解决了那个老移民问题,就这样!

相关问题 更多 >

    热门问题