2017-09-07 12 views
2

./manage.py migrateを実行すると、エラーが発生しますdjango.db.utils.IntegrityError: NOT NULL constraint failed: app.area_idmodels.pyは、私がarea = models.ForeignKey('Area')を書いたとき、私はあなたがデフォルトなしトランザクションに非NULL可能フィールド「エリア」を追加しようとしている エラーを得たdjango.db.utils.IntegrityError:NOT NULL制約に失敗しました:app.area_id

class Area(models.Model): 
    name = models.CharField(max_length=20, verbose_name='area', null=True) 

class User(models.Model): 
    name = models.CharField(max_length=200,null=True) 
    age = models.CharField(max_length=200,null=True) 
    area = models.ForeignKey('Area', default="") 

class Prefecture(models.Model): 
    name = models.CharField(max_length=20, verbose_name='city') 
    area = models.ForeignKey('Area') 

class City(models.Model): 
    name = models.CharField(max_length=20, verbose_name='region') 
      prefecture = models.ForeignKey('Prefecture') 

class Price(models.Model): 
    name = models.CharField(max_length=20, verbose_name='price') 
      PRICE_RANGE = (
       ('a', 'under500'), 
       ('b', '500-1000'), 
       ('c', 'upper1000'), 
      ) 
    price_range = models.CharField(max_length=1, choices=PRICE_RANGE) 
    city = models.ForeignKey('City') 

です。これを行うことはできません(データベースには既存の行を移入するための何かが必要です)。修正を選択してください:1)今すぐ一度だけのデフォルトを提供してください(この列にはnull値を持つ既存のすべての行に設定されます)2)終了し、デフォルト値をmodels.pyに追加させてください。 どうしたのですか?これをどうすれば解決できますか?

今models.pyは私も同じerror.Iすでに試したcache.clearを得た

class Area(models.Model): 
    name = models.CharField(max_length=20, verbose_name='area', null=True) 

class User(models.Model): 
    name = models.CharField(max_length=200,null=True) 
    age = models.CharField(max_length=200,null=True) 
    area = models.ForeignKey('Area', default="") 

class Prefecture(models.Model): 
    name = models.CharField(max_length=20, verbose_name='city') 
    area = models.ForeignKey('Area', null=True, blank=True) 

class City(models.Model): 
    name = models.CharField(max_length=20, verbose_name='region') 
      prefecture = models.ForeignKey('Prefecture', null=True, blank=True) 

class Price(models.Model): 
    name = models.CharField(max_length=20, verbose_name='price') 
      PRICE_RANGE = (
       ('a', 'under500'), 
       ('b', '500-1000'), 
       ('c', 'upper1000'), 
      ) 
    price_range = models.CharField(max_length=1, choices=PRICE_RANGE) 
    city = models.ForeignKey('City', null=True, blank=True) 

です()。

答えて

1

下記のモデルは、エリアをForeignKeyとして追加しようとしています。このPrefectureテーブルには既にいくつかのデータがあるので、Djangoは既存の行のエリアフィールドに何を追加するのか分かりません。

class Prefecture(models.Model): 
    name = models.CharField(max_length=20, verbose_name='city') 
    area = models.ForeignKey('Area') # non null-able field Django does 
            # not know what to add 

シンプルなソリューション。デフォルトの提供またはnull

class Prefecture(models.Model): 
     name = models.CharField(max_length=20, verbose_name='city') 
     area = models.ForeignKey('Area', null=True) 

注を追加:すべての既存の行のPrefectureareaフィールドにnullになります。新しい行にこのフィールドを追加することができます。

+0

THXあるお勧めします、ウルcomments.Iはウルのコードを試してみましたが、私は同じerror.I更新しました私の質問、あなたが何かを知っていれば私を助けてください。県モデルの – user8504021

+0

にはまだ 'area = models.ForeignKey( 'Area')'があります。これを 'area = models.ForeignKey( 'Area'、null = True、空白= True)に変更する必要があります' @ user8504021 –

+0

I私はまだいくつかのエラーが見つかった場合は、私は教えてください。 – user8504021

0

先に生成された移行ファイルを削除する場合は、先にを削除する必要があります。

models.pyを修正しても、./manage.py migrateは以前の移行を適用しようとするため、同じエラーが発生します。

以前に生成された移行ファイルを削除した後、次のようにします。

area = models.ForeignKey('Area', blank=True, null=True) 

これはareaは、オプションの属性になります、そして、あなたは新しい移行ファイルを生成し、./manage.py migrateを進めることができるようになります。

これを実行したら、データ移行スクリプトを書き込んで、不足しているarea属性を記入することもできます。詳しくはdocumentationをご覧ください。

また、移行スクリプトを作成する代わりに、既存のデータに対してこの属性を手動で入力することもできます(データベースを直接更新する、またはdjango-adminを使用するなど)。

すべてのあなたのデータはarea属性が塗りつぶされていることを確認してたら、最終的に変更することができます:あなたはこの移行を適用すると、あなたは、単にこれにNOT NULL制約を追加します

area = models.ForeignKey('Area') 

をフィールドに入力します。これは、前の手順でデータを入力しても問題ありません。

上記の答えとして
0

、[ヌル=真]が利用可能である、 私は別の[デフォルト=なし]はまた、利用可能

関連する問題