2015-12-14 38 views
4

時尚待模型操作,我得到以下錯誤:未處理嘗試當我在我的項目的應用程序的一個執行遷移執行遷移

ValueError異常:未處理掛起操作適用機型: common.shipmentaddress(簡稱由字段:catalog.Fulfillment.address)

的Django 1.9,蟒蛇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), 
     ), 
    ] 
+1

你可以發佈違規模型的定義嗎? –

+0

您可以發佈'common'和'catalog'應用程序的遷移,以及完整的追溯嗎? – knbk

+0

我編輯問題 我做的實際遷移是在其他應用程序(以上都沒有) – segalle

回答

4

好吧我知道了!

看來,遷移過程中去了我以前所有的遷移,而不是隻在最後一個......在以前遷移的一個有引起該問題

我固定一個錯誤的外鍵指針那個老移民,那就是它!

+3

這很愚蠢。由於這種行爲,當模型名稱發生更改時,Django會中斷遷移。 –

+0

@MJafarMash你有沒有找到解決這個問題的方法?我改變了模型名稱,並且我有一些相關的ManyToMany字段,並且它打破了這個錯誤信息。 – fidelitas

+2

@fidelitas我在舊遷移中更改了模型名稱。但它使舊的遷移對其他人無用 –

2

對於那些在Django ForeignKey中引用的模型進行重命名,我發現這個問題的另一種解決方案是在稍後的遷移中重新定義字段。這避免了編輯現有的遷移。

如果已以下操作(自動添加的)在第一遷移:

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並且to引用ForeignKey字段中的新型號名稱。

這是在Django 1.9.12上測試的。

+1

在我原來的帖子後一年,最好的方法是確保依賴項在正確的順序...然後你不需要重命名任何東西 歡呼聲 – segalle

相關問題