使用south迁移Django应用程序会在列上保留默认值

使用south迁移Django应用程序会在列上保留默认值,django,django-south,Django,Django South,我在模型中添加了一个新字段,用于跟踪用户的各个对象 然后,我使用south生成了一个迁移,它要求我提供此迁移的默认值,因为用户字段没有默认值。我输入1作为用户的id。我使用sqlite作为开发的db后端。现在,当我打开sqlite shell并查看db模式时,默认值仍然存在: CREATE TABLE "base_category" ("user_id" integer NOT NULL DEFAULT 1, "id" integer

我在模型中添加了一个新字段,用于跟踪用户的各个对象

然后,我使用south生成了一个迁移,它要求我提供此迁移的默认值,因为用户字段没有默认值。我输入1作为用户的id。我使用sqlite作为开发的db后端。现在,当我打开sqlite shell并查看db模式时,默认值仍然存在:

CREATE TABLE "base_category" ("user_id" integer NOT NULL DEFAULT 1,
                              "id" integer PRIMARY KEY,
                              "name" varchar(80) NOT NULL);
但是,在迁移文件中,它如下所示:

# Adding field 'TimeSlot.user'
db.add_column('base_timeslot', 'user',
                  self.gf('django.db.models.fields.related.ForeignKey')
                  (default=1, to=orm['auth.User']),
                  keep_default=False)
如果我理解正确,它不应该存在:

如果
keep\u default
为True,则该字段中指定的任何默认值都将永久添加到该列的数据库架构中。如果不是,则默认值仅在添加列时使用,然后再删除

在这里的其他问题中,有人指出,默认值不是在db级别处理的,而是在python中处理的

最后,我的问题是:

  • 当我不再需要默认值时,我还需要在数据库中处理它吗
  • 这可能是sqlite的问题,因为我无法找到如何使用SQL提示符手动删除默认值
  • 别担心,DB中的
    DEFAULT 1
    仅指定如果在表中创建新实例,默认情况下此字段将填充1,但此值可以更改。
    keep_default
    的作用是禁止编辑该值,例如,新字段的默认值为1,您不能更改该值。这不是你的情况。新实例的默认值为1,但您可以编辑该值

  • 继续点num 1-无需删除该值,因为
    DEFAULT 1
    是字段新实例默认值的正确表示形式


  • 它不被认为是一个错误,但现在是;South 0.7.7(我写这篇文章时即将发布)应该可以修复它。

    不,我不确定。然而,当我想手动更改sqlite表上的默认值时,我产生了怀疑,我没有找到明显的方法来实现它;OP的理解是正确的(False意味着它在迁移结束时被删除)。