【问题标题】:Django South migration error "contains null values" with null=True fieldDjango South 迁移错误“包含空值”,带有 null=True 字段
【发布时间】:2011-04-23 18:54:56
【问题描述】:

向模型添加简单缩略图字段时

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 时,South 会产生以下迁移:

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`

【问题讨论】:

    标签: django django-south


    【解决方案1】:

    修改迁移脚本如下解决问题:

    • 在 db.add_column 中添加“null=True, blank=True”
    • 在模型中添加“'null': 'True', 'blank': 'True'”['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'}),
    

    【讨论】:

    • 这是第一步。在第二步。您应该将旧数据设置为合理的默认值,并在第三步中删除空值...当然,如果这对您的应用程序有意义。
    • 这里重要的是,South 没有定义新列,允许模型中定义的 null 和空白。
    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2012-08-06
    • 2011-06-13
    • 2015-11-09
    • 2015-03-02
    • 2011-09-28
    • 2013-10-25
    • 2011-08-06
    相关资源
    最近更新 更多