2017-05-29 101 views
1

引用的模型的查找失敗最近升級的Django從1.7升級到1.8。將PRD DB轉儲到DEV中。不關心在開發數據庫中的任何遷移,所以:Django makemigrations 1.8.18 ValueError:由字段

  1. 刪除我的應用程序中的遷移文件夾。
  2. 從django_migrations表中刪除所有行。

好的,都很好。現在,我只是想爲這些應用做一個虛假的遷移,然後離開我們。所以我從頂級應用「網站」開始。

運行此:

python manage.py makemigrations website 

給出了文件:

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.db import migrations, models 
import django.db.models.deletion 


class Migration(migrations.Migration): 

dependencies = [ 
] 

operations = [ 
    migrations.CreateModel(
     name='HistoricalStock', 
     fields=[ 
      ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 
      ('period_date', models.DateField()), 
      ('close', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('open', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day_high', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day_low', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('change', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('average_gain', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('average_loss', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('rsi', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('true_range', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('average_true_range', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('price_average_true_range', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('thirty_day_constant_maturity_vol_skew', models.DecimalField(default=0.0, null=True, max_digits=20, decimal_places=10, blank=True)), 
     ], 
     options={ 
      'ordering': ['period_date'], 
     }, 
    ), 
    migrations.CreateModel(
     name='Industry', 
     fields=[ 
      ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 
      ('group', models.CharField(unique=True, max_length=40, verbose_name=b'name')), 
      ('slug', models.SlugField(unique=True)), 
     ], 
    ), 
    migrations.CreateModel(
     name='Sector', 
     fields=[ 
      ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 
      ('group', models.CharField(unique=True, max_length=40, verbose_name=b'name')), 
      ('slug', models.SlugField(unique=True)), 
     ], 
    ), 
    migrations.CreateModel(
     name='Stock', 
     fields=[ 
      ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 
      ('ticker', models.CharField(max_length=20)), 
      ('profile', models.TextField()), 
      ('name', models.CharField(max_length=40)), 
      ('broker_rating', models.DecimalField(default=0.0, null=True, max_digits=10, decimal_places=2, blank=True)), 
      ('ranking_industry', models.CharField(max_length=40, null=True, blank=True)), 
      ('ranking_industry_upper_percent', models.DecimalField(null=True, max_digits=20, decimal_places=10, blank=True)), 
      ('country', models.CharField(max_length=40, null=True, blank=True)), 
      ('has_options', models.BooleanField(default=False)), 
      ('current_stock_price', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('change', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('change_percent', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('open', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day_high', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day_low', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('ex_div_date', models.DateField(null=True, blank=True)), 
      ('pay_div_date', models.DateField(null=True, blank=True)), 
      ('earnings_date', models.DateField(null=True, blank=True)), 
      ('vol', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('pe', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('mkt_cap', models.DecimalField(default=0, max_digits=40, decimal_places=0)), 
      ('div_yield', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('div_amount', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('year_high', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('year_low', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day180pc', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('day360pc', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('instpct', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('insidepct', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('earnings_share', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('fifty_ma', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('two_hundred_ma', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('std_dev', models.DecimalField(default=0.0, max_digits=20, decimal_places=10)), 
      ('stats_period', models.IntegerField(default=0)), 
      ('last_refreshed', models.DateTimeField(null=True, editable=False, blank=True)), 
      ('industry', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='website.Industry', null=True)), 
      ('sector', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='website.Sector', null=True)), 
     ], 
    ), 
    migrations.AddField(
     model_name='industry', 
     name='sector', 
     field=models.ForeignKey(to='website.Sector'), 
    ), 
    migrations.AddField(
     model_name='historicalstock', 
     name='stock', 
     field=models.ForeignKey(to='website.Stock'), 
    ), 
    migrations.AlterUniqueTogether(
     name='historicalstock', 
     unique_together=set([('stock', 'period_date')]), 
    ), 
] 

看起來不錯,4個型號,與一對夫婦FK的到車型在同一個文件。

然後,運行假貨:

python manage.py migrate website --fake 

它去堅果:

ValueError: Lookup failed for model referenced by field keyedcache.Stock.sector: website.Sector 

它說,該應用程序keyedcache沒有找到該模型行業的參考? keyedcache有什麼與它有關的?

Keyedcache是​​我安裝的應用程序。

如果我運行:

python manage.py migrate keyedcache --fake 

它說沒有遷移。

而你又回到原處。

我已經在Django 1.7中完成了數百次,完全沒有問題。 1.8引起了這個問題。

怎麼回事?

回答

1

這是一條充滿許多其他許多人在你面前走過的陷阱的路徑。首先要做的是再次清理你的遷移。然後清除所有陳舊的.pyc文件。這一步非常重要。

之後,你需要做的

./manage.py makemigrations myapp 

對於所有的應用程序。那麼只有你運行

./manage.py migrate --fake 
+0

它的工作 - 奇怪。我刪除了.pyc文件並重新開始,並且一切都運行完畢。不知道! – professorDante

+0

很高興整理出來。與您的項目一切順利 – e4c5