我需要一个模型,该模型的字段带有一个随机的,与人为大小的唯一键。我们打算将其用于人工将ID联网到另一台计算机并重新调用数据。
我所拥有的:
def make_code():
numbers = "".join(random.choice(string.digits) for x in range(4))
letters = "".join(random.choice(string.ascii_lowercase) for x in range(2))
return numbers + letters
class PinRecord(models.Model):
pin = models.CharField(max_length=16, primary_key=True)
data = models.TextField(blank=False, null=False)
created = models.DateTimeField(auto_now_add=True)
@classmethod
def create_uniq(cls, action, data):
created = False
while not created:
pin, created = cls.objects.get_or_create(pin=make_code(), defaults={'data':data})
return pin.pin
是否有更好的方法来创建create_uniq?
现在,它有很长一段时间会循环很长的机会,特别是如果PinRecords没有得到正确清理或流量比预期的高的话。将尝试次数限制为有限次数的替代版本,除了中指错误外,没有给我们任何其他功能。
对于随机,唯一键问题,推荐的解决方案似乎是uuid,但用户将反对写下并重新键入uuid。