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
def create_new_ref_number():
return str(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
class Transaction(models.Model):
Referrence_Number = models.Charfield(
max_length = 10,
blank=True,
editable=False,
unique=True,
default=create_new_ref_number
)
def create_new_ref_number():
not_unique = True
while not_unique:
unique_ref = random.randint(1000000000, 9999999999)
if not Transaction.objects.filter(Referrence_Number=unique_ref):
not_unique = False
return str(unique_ref)
Solution 4:
Perhaps you could override the save() method on the Model. Something like this:
def save(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"