django-south: 初始数据的鸡生蛋问题

2 投票
1 回答
808 浏览
提问于 2025-04-17 07:34

我有一个模型:

class Foo(models.Model):
    pass

我想给它添加一个类型属性。类型的数量是固定的。现有的类型都应该有默认类型。所以我添加了类型:

class Type(models.Model):
    name = models.CharField(max_length=100)

还有一些初始数据的类型:

- model: app.Type
  pk: 1
  fields:
    name: "default"
- model: app.Type
  pk: 2
  fields:
    name: "special"

然后修改了 Foo

class Foo(models.Model):
    type = models.ForeignKey(Type, default=1)

这个 schemamigration 运行得很好。但是,migrate 失败了,因为 app.Type 还没有在数据库里,所以默认值1并不存在。

我该如何优雅地解决这个问题呢?我可以先把 Type 放进去,先迁移它,然后再修改 Foo,再迁移一次,但这样似乎只适用于本地站点(因为在其他站点迁移时,它会一次性处理所有内容)。

1 个回答

3

你需要为你的初始数据写一个额外的数据迁移,这个数据是在固定数据中使用的。可以看看South的文档,里面有关于这个主题的详细说明,链接是 http://south.aeracode.org/docs/fixtures.html#initial-data。希望这对你有帮助。

撰写回答