如何使用模型。UUIDField字段不带破折号

时间:2018-08-24 13:39:32

标签: python django

我尝试通过使用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字段不带破折号吗?。我想不带破折号地存储在数据库中,并且不带破折号地使用它。

2 个答案:

答案 0 :(得分:2)

您是否有机会使用PostgreSQL? UUIDField可能在列中使用本机uuid type。它仅使用16个字节(无破折号)有效地存储了它。在这种情况下,存储破折号,仅在您select时显示它们。

好消息是,在python代码中,您得到的是UUID object,因此您可以执行self.api_key.hex()以获取不带破折号的字符串。

答案 1 :(得分:2)

使用CharField字段代替UUIDField, def generate_uuid():     返回uuid.uuid4()。hex 类Profile(models.Model):     api_key = models.CharField(默认= generate_uuid,editable = False,unique = True,max_length = 40)