在django中生成randon和uniques id

时间:2016-01-15 19:42:51

标签: python postgresql django-models

我正在通过申请来学习Django。我需要在我的表中生成id,以便我可以将它们用作主键,并且它们也应该是可识别的,例如,如果我使用存储自行车实体的表的键,那么键应该像'bike1235efghffgtuf'如果在另一个表中我存储汽车实体,那么它应该生成像'car24343fhhgiy6ury'这样的键。这两个不仅足够长,允许在桌子上有足够的条目,而且很容易识别第一个属于自行车的桌子,而最后一个属于汽车的桌子。所以我的问题是如何生成这些特殊的表特定键?我知道如果我们不提供主键,Django会自动添加id,但它们是简单的数字而且它们不区分表意味着它们不建议此id属于哪个表。请指导我,因为随着我的应用程序的增长,由于这些细微的细节,它变得非常复杂。任何指导都非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用random模块轻松生成此类密钥。要使它们特定于表,只需将表唯一标识符添加到随机生成的键中:

import random, string
KEYLEN = 15
prefix = "car"
key = prefix + "".join(random.choice(string.letters+string.digits) for _ in range(KEYLEN))

以下是一些示例:

'caraeCqCA2LvMf9oLn'
'car7vAHCzaeuT7uAgN'
'carQ6bkckGfmdxMGim'
'car9WlxbcV1uOhXQkj'
'carONwavdLrMdc804g'
'carSwBU0WkNgT7YL1l'
'carCtWClbz9khoMDmU'

如果您的密钥非常长且随机,则不太可能重复。但是,如果您对此感到担心,只需将密钥存储到列表中即可。然后,每次生成新的时,只需检查列表:

while True:
    key = prefix + "".join(random.choice(string.letters+string.digits) for _ in range(KEYLEN))
    if not key in key_list:
        key_list.append(key)
        break