2017-06-11 3 views
1

私はdjango-citiesという名前のアプリをアンインストールしようとしていますが、私のアプリで「場所」私はVenueと呼ばれるモデルで、その移行0001_initial.pyForeingKeyからcities.Subregionモデルを持っていたを持っていますdjango-citiesです。をアンインストールし、アプリAアプリBは、1歳の移行における依存性を持っていることを

私はINSTALLED_APPSdjango-citiesを削除するために進めたが、私は次のエラーました:その後、私はそれらの依存関係を削除し、django-citiesをアンインストールし、すべてが私のために働いたが、誰がプロジェクトをインストールする必要がある場合、

Traceback (most recent call last): 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/utils/autoreload.py", line 227, in wrapper 
    fn(*args, **kwargs) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 128, in inner_run 
    self.check_migrations() 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/core/management/base.py", line 422, in check_migrations 
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 20, in __init__ 
    self.loader = MigrationLoader(self.connection) 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 52, in __init__ 
    self.build_graph() 
    File "/home/d/.virtualenvs/beplay/local/lib/python2.7/site-packages/django/db/migrations/loader.py", line 274, in build_graph 
    raise exc 
django.db.migrations.exceptions.NodeNotFoundError: Migration places.0001_initial dependencies reference nonexistent parent node (u'cities', u'0010_adjust_unique_attributes') 

を私はrequirements.txtから削除し、それがまだ移行に参照されているため、

ValueError: Related model u'cities.Subregion' cannot be resolved 

migrateコマンドは次のエラーが発生します0:

class Migration(migrations.Migration): 

    initial = True 

    dependencies = [ 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='Venue', 
      fields=[ 
       ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 
       ('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')), 
       ('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')), 
       ('name', models.CharField(max_length=255)), 
       ('phone', models.CharField(blank=True, max_length=255, null=True)), 
       ('mobile', models.CharField(blank=True, max_length=255, null=True)), 
       ('email', models.EmailField(blank=True, max_length=254, null=True)), 
       ('address', models.CharField(blank=True, max_length=255, null=True)), 
       ('latitude', models.CharField(blank=True, max_length=100, null=True)), 
       ('longitude', models.CharField(blank=True, max_length=100, null=True)), 
       ('subregion', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cities.Subregion')), 
      ], 
      options={ 
       'abstract': False, 
      }, 
     ), 
    ] 

その後、私は行を削除:

('subregion', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cities.Subregion')), 

をし、別のエラーを持っている:

AttributeError: 'NoneType' object has no attribute 'is_relation' 

また、私はこれをGoogleでも、プロジェクトからすべての.pycのファイルを削除しようとしましたエラーがあり、thisが見つかりましたが、回答はありませんでした。

これに関する情報はありますか?

私の悪い英語をありがとうと申し訳ありません。

注:あなたが進む前に、データベースから古いVenueテーブルを削除する必要があり、次のソリューションの両方について

+0

試してみます。 –

+0

DBからVenueテーブルを削除したくありません。 –

答えて

1

は、2つの解決策があります。

簡単1:あなたのmigrations/フォルダに

  • 移動し、 __init__.pyファイル以外のすべてを削除します。

  • INSTALLED_APPSからあなたのアプリを削除してください。

  • python manage.py makemigrationsを実行すると、フォルダ内の移行が再現されます。

  • 実行python manage.py migrate

    欠点:ことが重要ならばあなたの移行履歴を失う(あなたのケースで、私はあなたが移行0001を参照してくださいので、それは問題ではないと仮定します)

難しい方法:

のすべての移行ファイルを変更する必要がありますフォルダ:すべての移行ファイルへ

  • 行くと
  • は、これらの参照を削除してアンインストールされますアプリへの参照を見つける:から

    ('subregion', models.ForeignKey(
            blank=True, 
            null=True, 
            on_delete=django.db.models.deletion.CASCADE, 
            to='cities.Subregion' 
          )) 
    

    例は、行を削除しますVenueテーブルのフィールドの移行。

  • INSTALLED_APPSからあなたのアプリを削除してください。

  • 実行python manage.py migrate

    欠点:それは複雑で、ミスを起こしやすいです。

幸運:)この移行ファイルを削除し、再び移行makemigration実行しますが、まず、DBから会場のテーブルを削除してもdjango_migrationsテーブルから古い会場移行ファイルのエントリを削除する

+0

私は簡単な解決策はうまくいくはずだと思うが、すべてのサーバー(ステージングとプロダクト)に最後の移行が導入されていることを確認する必要がある。なぜなら、フォルダからすべての移行ファイルを削除する必要があるからです。その後、誰かがプロジェクトをインストールする必要があるときは、知らずにパスします。編集と答えをありがとう。 私はそれをテストします。 –

+0

簡単な解決法では、 'makemigrations'の後に、新しい' 0001_initial.py'を作成します。 –

+0

私はdjango_migrationsレコードで何が起こったのかというと疑いがあります。なぜなら、このアプリケーションでマイグレーションを行う必要がある場合、djangoはすでにステージングとプロダクションDBに適用されている0002移行を作成するからです。 –

関連する問題