2015-11-12 3 views
13

のPython 3に、Django 1.8.5、PostgresのDjangoの移行エラー:列は、私は正常に動作してきたモデル<code>Sites</code>を持って

存在しません。私は最近、フィールドairport_codeを追加し、データを移行しようとしました。

class Site(BaseModel): 

    objects = SiteManager() 

    name = models.CharField(max_length=200, unique=True) 
    domain = models.CharField(max_length=200, unique=True) 
    weather = models.CharField(max_length=10) 
    nearby_sites = models.ManyToManyField('self', symmetrical=False, blank=True) 
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) 
    facebook = models.URLField(max_length=200) 
    twitter = models.URLField(max_length=200) 
    header_override = models.TextField(blank=True) 
    email_header_override = models.TextField(blank=True) 
    timely_site_tag_id = models.IntegerField() 
    timely_featured_tag_id = models.IntegerField() 
    timely_domain = models.CharField(max_length=255) 
    sitemap_public_id = models.CharField(max_length=255) 
    state = models.CharField(max_length=24) 
    airport_code = JSONField() 

私はエラーだmakemigrationsを実行したときただし、:もちろん

django.db.utils.ProgrammingError: column sites_site.airport_code does not exist LINE 1: ..._site"."sitemap_public_id", "sites_site"."state", "sites_sit...

を私がしようとしている時に列が明らかに存在しないため、これは、意味がありません。移行中に作成します。

スタックオーバーフローのこのバグについては、未回答の質問や、手動で移行ファイルを作成したり、データベースを破棄して再構築したりするソリューションがあります。これは大丈夫な解決策ではありません。

答えて

6

このバグは、settings.pyのINSTALLED_APPSからdjangoデバッグツールバーをコメントアウトすることで解決しました。私はデバッグツールバーがなぜ犯人なのかよく分かりませんが、私がコメントした後、makemigrationsmigrateを実行できました。

私はそれを理解しようと12時間を費やしたように、これは誰かを助けることを願っています。

+4

これは私にとっても起こっているが、残念ながら、私はDjangoのツールバーを使用していませんよ。どのように進むかわからない... –

+0

Djangoのツールバーをコメントアウトすることも私のために働いた。私のデータベースはSQLiteです。 – JimInCO

6

マクロを実行した後は、必ずステップごとにスタックトレースを実行してください。

私のケースでは、全く新しいアプリケーションのforms.pyに含まれているフォームへの呼び出しによってトレースされていることがわかりました。これは、新しい移行を作成しようとしていたモデルを呼び出しました。

forms.pyからforms.pyをviews.pyに移動すると、問題が修正されました。

-1

私のpostgresデータベースを別のサーバーに移行した後、この問題が発生します。何とか私はデータベースを台無しにして、新しいクラスのUserProfileでモデルを更新できませんでした。

私は、既存のスキーマのための最初の移行を作成し、問題解決:rm -rf <app>/migrations/

  • が移行をリセットします。そのmigrationsフォルダを削除、すべてのアプリケーションのためのコマンドでdelete from django_migrations;DELETE FROM django_migrations WHERE app='my_app';
    1. django_migrationsテーブルを「組み込み」アプリの場合:python manage.py migrate --fake
    2. 各アプリの実行:python manage.py makemigrations <app>。依存関係を注意してください(ForeignKeyは親モデルの後に実行する必要があります)。最後に
    3. python manage.py migrate --fake-initial

    はここでそれを手に入れた:私は、この問題の解決に関連したことはわからないけど、最初、私は原因となったPostgreSQLでテーブルを落としhttps://stackoverflow.com/a/29898483

    PSをエラーが発生し、モデルのUserProfileクラスがコメントアウトされました。シェルで

    sudo -su postgres 
    psql databse_name 
    DROP TABLE table_name; 
    

    models.py:

    #class UserProfile(models.Model): 
        #user = models.OneToOneField(settings.AUTH_USER_MODEL, unique=True, primary_key=True, on_delete=models.CASCADE, related_name='user_profile') 
        #avatar = ThumbnailerImageField(upload_to='profile_images', blank=True) 
        #country = models.CharField(max_length = 128)