如何设置任意id-like键?

时间:2016-05-20 08:56:54

标签: django django-models

如何设置id之类的东西,这些东西在创建对象后会是唯一的并生成?

我想为每个对象分配标识符,以便user可以通过此ID识别产品,但我不希望它是常规的自动增量ID,因为我希望它可以说包括10位数。 (我的pk'是1,2...inf)。

到目前为止,我所做的是我尝试创建名称的哈希,但这并不是一个好方法。

class Job(models.Model):
    job_id = models.BigIntegerField() # or hash(something)
    customer = models.ForeignKey(User, related_name='orders', help_text=_("Customer"), on_delete=models.CASCADE)
    translator = models.ForeignKey(User, related_name='jobs', null=True, blank=True, help_text=_(u"Translator"))
    price = models.FloatField(null=True, blank=True, help_text=_(u"Price"))

一种可能的方法是创建一个post_save signal,它会生成随机的10位数字,然后检查其唯一性,但这可能是非常耗费的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以改为使用UUIDField

  

用于存储通用唯一标识符的字段。使用Python的UUID   类。在PostgreSQL上使用时,它以uuid数据类型存储,   否则在char(32)。

     

通用唯一标识符是AutoField for的一个很好的替代品   首要的关键。数据库不会为您生成UUID,所以它是   建议使用默认值:

id/classofimg{
width:50%; 
}

您没有提到使用过RDMBS,但PostgreSQL对UUID有更好的支持,您可以阅读更多here