我更改了模型的primary_key,现在它的`ForeignKey`模型不起作用

时间:2018-03-24 06:24:10

标签: python django migration

我有Post型号:

class Post(models.Model):
    id = models.CharField(max_length=18, primary_key=True, default=random_string)
    has_upvoted = models.ManyToManyField(User, related_name="has_upvoted")
    has_downvoted = models.ManyToManyField(User, related_name="has_downvoted")

PostScore模型:

class PostScore(models.Model):
    user = models.ForeignKey(User, blank=True, null=True)
    post = models.ForeignKey(Post, related_name='score')

由于我最近将id模型上的Post从默认id = models.AutoField(primary_key=True)更改为当前CharField,因此我在运行{时导致此错误{1}}:

migrate

知道如何解决这个问题吗?

编辑:

我现在正在接收django.db.utils.ProgrammingError: foreign key constraint "post_post_has_downvoted_post_id_3b2ec618_fk_post_post_id" cannot be implemented DETAIL: Key columns "post_id" and "id" are of incompatible types: integer and character varying. - 我不知道为什么我删除了与IntegrityError更改相关的所有迁移历史记录,因此它应该恢复正常。

这里是追溯:

id

1 个答案:

答案 0 :(得分:0)

当你从AutoFieldCharField编辑PK类型时,它会尝试从旧值获取新类型并失败。如果您想使用 UUID ,请尝试改为使用UUIDField

说实话,你应该触摸id参数。如果您需要将唯一字符串与您的数据库记录相关联,我建议您添加新字段

local_id = models.CharField(unique=True, mac_length=120)

如果你仍然需要你的字符串作为PK,即使不推荐,最简单的方法是删除数据库,这样就不需要将integer转换为varchar