使用随机生成的,具有人类大小的唯一ID创建模型实例

时间:2019-05-29 21:03:09

标签: python django database django-models

我需要一个模型,该模型的字段带有一个随机的,与人为大小的唯一键。我们打算将其用于人工将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。

0 个答案:

没有答案