给你import random
import string
''.join(random.choice(string.digits) for _ in range(8))
python3.6使用随机选择()
^{pr2}$
避免可能的碰撞:
尝试使用生成的id(完整性错误除外)创建新对象,请再次创建id。在
例如-def create_obj():
id = ''.join(random.choices(string.digits, k=8))
try:
MyModel.objects.create(id=id)
except IntegrityError:
create_obj()
或者def create_unique_id():
return ''.join(random.choices(string.digits, k=8))
def create_object():
id = create_unique_id()
unique = False
while not unique:
if not MyModel.objects.get(pk=id):
unique = True
else:
id = create_unique_id()
MyModel.objects.create(id=id)
感谢@WillemVanOnsem指出了生成重复id的可能性,我提供的两个示例将根据需要创建一个新的id,以获得唯一的id,但是,随着数据库中行数的增加,获取唯一id的时间将越来越长,并且数据库中有太多记录(10^8)时,无法使用8位uid创建新记录,因为所有可能的组合都已存在,那么在尝试时,您将陷入无限循环创建新对象。
如果我的遗嘱所提供的数据是正确的,我说这些变化太高了。所以我建议不要自己创建id,使用django的默认auto字段或uuid,这样可以保证空间和时间的唯一性。在