我试着把我的网页上传到Heroku服务器,但遇到了这个问题
尝试迁移数据库时出现错误
上述异常是导致以下异常的直接原因:
return self.cursor.execute(sql, params)
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: cannot cast type uuid to integer
LINE 1: ...ict_word" ALTER COLUMN "id" TYPE integer USING "id"::integer
^
models.py
class Word(models.Model):
id = models.UUIDField(primary_key=True, unique=True)
esearch = models.TextField()
eentry = models.TextField()
tentry = models.TextField()
ecat = models.TextField()
ethai = models.TextField(null=True)
esyn = models.TextField(null=True)
eant = models.TextField(null=True)
def __str__(self):
return self.eentry
def get_absolute_url(self):
return reverse('word-detail', args=[str(self.id)])
有人知道怎么修吗
5条答案
按热度按时间vdgimpew1#
正如this answer中所指出的:
更好的方法通常是添加一个uuid列,然后修复任何外键引用以指向它,最后删除原始列。
因此,要在django中处理此问题,请执行以下操作:
*1)将迁移恢复到工作图
2)将
temp_id = models.UUIDField(default=uuid.uuid4)
添加到模型中,然后运行makemigrations
3)将
primary_key=True
添加到temp_id
字段中,然后再次运行makemigrations
4)将该字段重命名为
id
(或您想要的任何名称),然后第三次运行makemigrations
**5)通过
python3 manage.py migrate
**将迁移推送到数据库custom migration
**。请注意这是使用
django 3.1
和postgres
进行测试的;YMMVnukf8bse2#
几个小时后,我用一个非常容易和简单的方法解决了这个问题
仅删除迁移目录中的所有迁移文件
由于将BigInt转换为UUID是一个问题,所以首先不要生成BigInt,这样创建UUID就不会有任何问题;)
2w2cym1i3#
我认为您应该将默认值定义为UUID生成器。
示例:
gstyhher4#
当我尝试在我的djago模型(django 3.2)上使用
uuid
作为id
与postgres时,我遇到了同样的问题。我通过添加“
max_length=36
“来解决这个问题--这将限制字段的长度。相关问答:Link
uelo1irk5#
我遇到了同样的问题,通过简单地手动更改表中id列的类型,用bigint替换in,我希望它对本主题涉及的人有用。