Django如何为模型属性自动生成唯一的数字/字符串

2024-04-25 12:20:41 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我一直在尝试在django模型中生成10位数的唯一随机数,而不把它作为主键。我的模型是

Class Transaction(models.Model):
      Referrence_Number = models.Charfield(max_lenght = 10, blank=True, editable=False, unique=True) 

我知道Django内部有一个特殊的特性,可以生成随机字符串,这是我在阅读文档后了解到的。在

^{pr2}$

但我的问题是如何将get_random_string函数合并到我的transaction_number实例中的django事务模型中。事实上,我对django还是个新手,我无法理解。在


Tags: django模型truenumbermodelmodelsmaxclass
3条回答

我通常使用uuid,创建object时,uuid字符串会设置为字段

the_field = models.CharField(max_length=36, default=uuid.uuid4)

也许您可以重写模型上的save()方法。像这样:

def save(self,*args, **kwargs):
    self.Reference_Number = get_random_string(10).lower()
    super(Transaction, self).save(*args, **kwargs)

您可以将属性的默认值设置为生成您想要的Referrence_Number的函数。只是不要在创建记录时设置Referrence_Number

例如,模型属性如下所示:

from utils import create_new_ref_number

Class Transaction(models.Model):
      Referrence_Number = models.Charfield(
           max_length = 10,
           blank=True,
           editable=False,
           unique=True,
           default=create_new_ref_number()
      )

在你的utils.py文件中,你会有如下内容:

^{pr2}$

虽然您可以简单地在default参数中抛出randint函数,但您应该将其抽象出来,以便执行额外的操作,如验证是否存在具有相同id的记录等

相关问题 更多 >

    热门问题