使用 Django South 将自动增量字段添加到现有模型中?

发布于 2024-12-26 18:50:15 字数 427 浏览 2 评论 0原文

我有一个 Django 项目,最初是作为旧数据库的导入而开始的。因此,出现了具有复合主键的模型。只要我只使用旧数据,这种方法就有效,但现在我想添加新数据,而我创建的表单告诉我,我正在尝试插入重复数据,大概是因为它只将其中一个字段视为主键。

现在我想更改模型以使用自动增量主键,就像 Django 会自动添加一样。我尝试从字段中删除主键属性并将它们放入 Meta 内部类中的 unique_together 中。当我使用 South 运行 schemamigration 时,它想要按预期添加一个 id 字段,但它要求提供默认值。

如何指定 South 应以对自动增量字段合理的方式分配唯一键? (即将序列 [1...n] 分配给记录的任意顺序)

如果这是不可能的,是否有另一种方法可以完成相同的事情,最好使用 Django 和 South?

I have a Django project that started as an import of a legacy database. Because of this, there is a model with a composite primary key. This worked as long as I used only the legacy data, but now I want to add new data and the form I created is telling me that I am trying to insert duplicate data, presumably because it is only looking at one of the fields as the primary key.

Now I want to change the model to use an autoincrement primary key, like one Django would automatically add. I tried removing the primary key attributes from the fields and putting them in unique_together in the Meta inner class. When I ran schemamigration with South, it wanted to add an id field as expected, but it asked for a default value.

How can I specify that South should assign unique keys in some way that is reasonable for an autoincrement field? (i.e. assign the sequence [1...n] to some arbitrary ordering of the records)

If this is impossible is there another way to accomplish the same thing, preferably using Django and South?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你げ笑在眉眼 2025-01-02 18:50:15

我通过解决方法解决了需要执行此操作的问题:

我使用 INSERT INTO...SELECT... 将原始表中的数据复制到 SQL 中的临时表中。然后我删除了原始表并使用自动增量字段重新创建了它。然后,我将数据复制回新表中,并通过 INSERT 命令自动添加自动增量值。最后,我执行了一次 South 迁移的假运行,以使 South 的表与新架构保持一致。

I solved the problem that required me to do this with a workaround:

I copied the data from the original table into a temporary table in SQL with INSERT INTO... SELECT.... I then deleted the original table and recreated it with the autoincrement field. Then I copied the data back into the new table, with the autoincrement values added automatically by the INSERT command. Finally I executed a fake run of the South migration to make South's tables consistent with the new schema.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文