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"