2011-08-13 10 views
1

編集:これが起こった理由を理解しています。これはinitial_data.jsonファイルの存在によるものです。控えめに、南は移住後はフィクスチャを追加したいが、フィールドのユニークな性質のため失敗する。postgresqlデータベースのDjango south migrationエラー

 

    class Setting(models.Model): 
     anahtar = models.CharField(max_length=20,unique=True) 
     deger = models.CharField(max_length=100) 

     def __unicode__(self): 
      return self.anahtar 

スキーマの移行コマンドが正常に完了し、これに

 

    class Setting(models.Model): 
     anahtar = models.CharField(max_length=20,unique=True) 
     deger = models.CharField(max_length=40) 

     def __unicode__(self): 
      return self.anahtar 

、しかし、移行しようとすると、私は、このエラーを与える:

こんにちは、

私はこのことから私のモデルを変更しました:

IntegrityError:重複するキー値が一意性制約 "blog_s etting_anahtar_key "

詳細:Key(anahtar)=(blog_baslik)は既に存在します。

フィールドを一意に保ちたいが、フィールドを移行します。ところで、db内の他のテーブルが損なわれない限り、そのテーブル上のデータ損失は許容されます。

答えて

1

実際には、毎回initial_data.jsonを実行するsyncdbのデフォルトの動作です。 Djangoのドキュメントから:

If you create a fixture named initial_data.[xml/yaml/json], that fixture will be loaded every time you run syncdb. This is extremely convenient, but be careful: remember that the data will be refreshed every time you run syncdb. So don't use initial_data for data you'll want to edit.

参照:個人的にhttps://docs.djangoproject.com/en/dev/howto/initial-data/#automatically-loading-initial-data-fixtures

が、私は変更が遅れる場合に発生し、毎回を再ロードする必要初期データのためのユースケースだと思うので、私はinitial_data使用することはありません.json。

あなたがSouthを使用しているので、より良い方法は、マイグレーションに必要な特定のフィクスチャでloaddataを手動で呼び出すことです。初期データの場合は、0001_initial.pyの移行が行われます。

def forwards(self, orm): 
    from django.core.management import call_command 
    call_command("loaddata", "my_fixture.json") 

参照:http://south.aeracode.org/docs/fixtures.html

はまた、あなたの治具へのパスは、プロジェクトのルートに相対的であることを覚えておいてください。あなたのフィクスチャは、「MyProjectと/ myappに/備品/ my_fixture.json」にあるのであれば、call_commandは実際には次のようになります。

call_command('loaddata', 'myapp/fixtures/my_fixture.json') 

そして、もちろん、あなたのフィクスチャは、そうでない場合は、「initial_data.json」という名前することはできませんデフォルトの動作が引き継ぎます。

関連する問題