我已经改变了我的模型PK:
id = models.CharField(primary_key=True, unique=True, default=make_key, max_length=32)
到这个
id = models.UUIDField(primary_key=True, unique=True, default=TimeUUID, editable=False)
TimeUUID is this function。但是,我在下面运行迁移时遇到错误,为什么?
数据库中没有数据我清除了所有行。 该函数生成如下所示的UUID:
00332873-d693-da82-720e-27dff1cf2a9b
00332873-d693-db36-dd92-eac7c082f13c
00332873-d693-dc0a-aef8-9fb752a3fb6c
即。 [32 bits timestamp high]-[16 bits timestamp mid]-[16 bits timestamp low]-[16 bits random]-[48 bits random]
数据库是Postgres。
错误:
File "/Users/user/Documents/app/env/lib/python3.4/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: can't adapt type 'TimeUUID'
可能是Django UUID字段不接受具有不同顺序的位的UUID吗?
也尝试过:
def get_UUID():
return TimeUUID()
然后
id = models.UUIDField(primary_key=True, unique=True, default=get_UUID, editable=False)
仍然会出现同样的错误。
答案 0 :(得分:1)
TimeUUID是一个类。调用它会返回该类的实例。 Django不知道如何处理该值,因为不知道如何将其存储为数据库中的值。
要使用它,您需要将其转换为字符串。你可以在lambda中做到这一点:
id = models.UUIDField(
primary_key=True, unique=True, default=lambda: str(TimeUUID()), editable=False)