我尝试通过使用models.UUIDField
(而不是default=uuid.uuid4().hex
)使default=uuid.uuid4()
不带破折号
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
api_key = models.UUIDField(default=uuid.uuid4().hex, editable=False, unique=True)
subscription = models.IntegerField(
choices=[(s.value, s.name) for s in Subscription],
null=False,
blank=False
)
def __str__(self):
return str(self.api_key)
但是,结果仍然带有破折号。
django=# select * from users_profile;
id | api_key | secret_key | subscription | user_id
----+--------------------------------------+------------+--------------+---------
1 | 9da3546c-660c-46c6-adc4-6a13e6ee202b | | 0 | 1
2 | 9cbc3a68-7f50-4b18-9e61-7b009f22a0e8 | | 0 | 2
(2 rows)
我可以知道如何使用模型。UUIDField字段不带破折号吗?。我想不带破折号地存储在数据库中,并且不带破折号地使用它。
答案 0 :(得分:2)
您是否有机会使用PostgreSQL? UUIDField
可能在列中使用本机uuid type。它仅使用16个字节(无破折号)有效地存储了它。在这种情况下,不存储破折号,仅在您select
时显示它们。
好消息是,在python代码中,您得到的是UUID object,因此您可以执行self.api_key.hex()
以获取不带破折号的字符串。
答案 1 :(得分:2)