gpt4 book ai didi

django - 南,如何从 CharField 迁移到 ForeignKey?

转载 作者:行者123 更新时间:2023-12-04 15:24:27 26 4
gpt4 key购买 nike

该模型:

class ListContext(models.Model):
content = models.CharField(max_length=200, blank=True)

我使用南来管理架构迁移。

现在我将以前的模型更改为这个模型:
from django.contrib.contenttypes.models import ContentType

class ListContext(models.Model):
content = models.ForeignKey(ContentType, blank=True, null=True)

对于迁移:
$ python manage.py schemamigration --auto page 
~ Changed field content on page.ListContext
+ Added index for ['content'] on page.ListContext
Created 0010_auto__chg_field_listcontext_content.py. You can now apply this migration with: ./manage.py migrate page

一切都很好,直到这一点:
$ python manage.py migrate page 
Running migrations for page:
- Migrating forwards to 0010_auto__chg_field_listcontext_content.
> page:0010_auto__chg_field_listcontext_content
FATAL ERROR - The following SQL query failed: ALTER TABLE "page_page_listcontext" ALTER
COLUMN "content_id" TYPE integer, ALTER COLUMN "content_id" DROP NOT NULL, ALTER COLUMN
"content_id" DROP DEFAULT;

The error was: column "content_id" cannot be cast to type integer

Error in migration: page:0010_auto__chg_field_listcontext_content

我可以猜测在从 string 到 int 的转换过程中会发生错误,但是如何避免这种情况并完成迁移?

这有什么不同吗,我不在乎保留存储在表中的数据。

最佳答案

如果您手动编辑转发功能:

重命名列:

db.rename_column('sometable', 'content', 'content_old')

然后添加您的列:
db.add_column('sometable', 'content', self.gf('django.db.models.fields.IntegerField')(default=0))

然后执行一个查询,通过查找 id 来更新新字段。
db.execute("""
UPDATE sometable SET content =
(SELECT FKTable.id FROM FKTable
WHERE (FKTable.content = sometable.content_old AND
sometable.content_old != '')
OR (FKTable.content = 'none' AND sometable.content_old = '')) --Maybe cut the OR out
""")

然后你将不得不做一些花哨的事情来使向后正常工作。

关于django - 南,如何从 CharField 迁移到 ForeignKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com