Skip to content Skip to sidebar Skip to footer

Django How To Auto Generate A Unique Number/string For A Model Attribute

So i been trying to generate 10 digit unique random number in django model without making it my primary key. My model is Class Transaction(models.Model): Referrence_Number =

Solution 1:

I normally use uuid, the uuid string will set to the field when create object

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

Solution 2:

You can set a default on your attribute to a function that generates whatever Referrence_Number you'd like. Just don't set a Referrence_Number on record creation

For example, your model attribute would look like this:

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
      )

And in your utils.py file, you'd have something like this:

import random

defcreate_new_ref_number():
      returnstr(random.randint(1000000000, 9999999999))

While you could simply throw the randint function in the default parameter, you should abstract it away so you can perform extra niceties like verify no record exists with that same id, etc.

Solution 3:

This will automatically create a unique Referrence_Number

import random

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

    defcreate_new_ref_number():
                not_unique = Truewhile not_unique:
                    unique_ref = random.randint(1000000000, 9999999999)
                    ifnot Transaction.objects.filter(Referrence_Number=unique_ref):
                        not_unique = Falsereturnstr(unique_ref)

Solution 4:

Perhaps you could override the save() method on the Model. Something like this:

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

Post a Comment for "Django How To Auto Generate A Unique Number/string For A Model Attribute"