我有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
答案 0 :(得分:0)
当你从AutoField
到CharField
编辑PK类型时,它会尝试从旧值获取新类型并失败。如果您想使用 UUID ,请尝试改为使用UUIDField
。
说实话,你应该触摸id参数。如果您需要将唯一字符串与您的数据库记录相关联,我建议您添加新字段
local_id = models.CharField(unique=True, mac_length=120)
如果你仍然需要你的字符串作为PK,即使不推荐,最简单的方法是删除数据库,这样就不需要将integer
转换为varchar
。