Search code examples
djangomodeluuid

Django: How to generate unique order id


This is how my model looks like. When ever user orders. The order id provided by django is simple. Its like 1,2,3 ..... 100.

class UserOrder(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='orders', 
           on_delete=models.CASCADE)
    cart = models.ForeignKey(Cart, related_name="orders", on_delete=models.CASCADE, null=True, 
           blank=True)
    date = models.DateTimeField(default=datetime.now)
    total_price = models.IntegerField(null=True, blank=True)
    note = models.TextField(null=True, blank=True)
    cancel_reason = models.TextField(null=True, blank=True)
    cancelled = models.BooleanField(default=False)
    confirmed = models.BooleanField(default=False)

    def __str__(self):
        return self.user.username 

Solution

  • Your question is not well defined but I think I understand your problem, you need a id (lookup field) that is not simple.

    you can use uuid, and use this uuid for all the lookup in the viewsets, instead of the sequentially created id by django. something like this lookup_field = 'uuid' in views.

    import uuid
    
    class UserOrder(models.Model):
         uuid = models.UUIDField(default=uuid.uuid4, unique=True, db_index=True, editable=False)
    

    read more about uuids here https://docs.python.org/3/library/uuid.html#uuid.uuid4