2010-10-11 46 views
3

當添加用於易縮略圖的字段到模型Django的南遷移錯誤「包含空值」,使用null =真字段

easy_thumbnail = ThumbnailerImageField(
    null=True, blank=True, verbose_name=_("Easy_Thumbnails"), 
    upload_to="easy_thumbnails", 
    resize_source=dict(size=(100, 100), crop="smart"), 
) 

當執行./manage.py schemamigration test --auto,南產生以下遷移:

def forwards(self, orm): 
    # Adding field 'Test.easy_thumbnail' 
    db.add_column('test_test', 'easy_thumbnail', self.gf('django.db.models.fields.files.ImageField')(), keep_default=False) 
[...] 
models = { 
    'test.test': { 
     'Meta': {'object_name': 'Test'}, 
     'easy_thumbnail': ('django.db.models.fields.files.ImageField', [], {}), 

當執行./manage.py migrate test,我得到這個錯誤:

The error is `django.db.utils.IntegrityError: column "easy_thumbnail" contains null values` 

回答

2

修改遷移腳本如下解決了這個問題:

  • 添加「空=真,空=真」在db.add_column
  • 添加「‘空’:‘真’,‘空白’:「真「」在模型[ 'test.test'] [ 'easy_thumbnail']

的代碼:

def forwards(self, orm): 
    # Adding field 'Test.easy_thumbnail' 
    db.add_column('test_test', 'easy_thumbnail', self.gf('django.db.models.fields.files.ImageField')(null=True, blank=True), keep_default=False) 
[...] 
models = { 
    'test.test': { 
     'Meta': {'object_name': 'Test'}, 
     'easy_thumbnail': ('django.db.models.fields.files.ImageField', [], {'null': 'True', 'blank': 'True'}), 
+0

這是第一個步驟。第二步。您應該將舊數據設置爲合理的默認值,並在第三步中刪除空值......當然,如果這在您的應用程序中是有意義的。 – Almad 2010-10-13 15:42:32

+0

這裏重要的是,南方沒有定義新的列,允許模型中定義的null和blank。 – 2010-10-14 23:35:52