将TextField()迁移到JSONField()

时间:2019-02-16 19:38:51

标签: python django

我以前在模型中有一个TextField(blank=True, default='')。由于项目需求的某些变化,现在存储字典是一个更好的主意,如下所示:

instructions {
    wait_time: {
        active: True
        message: 'This is a standard message'
    }
}

因此我将其更改为JSONField:JSONField(blank=True, null=True)。在序列化程序中进行了更改,并通过了该特定字段的测试。当我试着剩下的衣服时,出现了这个错误:

AssertionError: {u'non_field_errors': [u'null value in column "instructions" violates not-null constraint\n

这很有意义,因为TextField被设置为null=False。现在,该字段应接受空值。我以为makemigrationsmigrate会做的。

django.db.utils.DataError: invalid input syntax for type json
DETAIL:  The input string ended unexpectedly.
CONTEXT:  JSON data, line 1:

我的第一个想法是关于之前为TextField()设置的默认值。为了对其进行测试,我将迁移还原到其创建之前的那一刻,删除了新的迁移“ mademigrations”并运行了测试。出于某些奇怪的原因,我仍然得到:“违反了非null约束”错误。这使我认为问题不在于之前将TextField()设置为null = False。如果是这样,这两个问题可能彼此无关。无论哪种方式,我都不知道如何进行。

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。
这是由于TextField设置为null=True
只需将您的NULL字段更改为"null",它将像超级按钮一样工作。