not a valid UUID.

809 views
Skip to first unread message

Benedict Uwazie

unread,
May 2, 2020, 8:38:16 PM5/2/20
to Django users
I added a field called transaction_id in my models.py I want that field to be used to track every transaction on my "DuesLevy" model I imported uuid to this to happen, but each time I migrate I get this error.
How do i prevent this error from occurring each time I migrate (python manage.py migrate) File "C:\Users\Benedict\Miniconda3\envs\django3\lib\site-packages\django\db\models\fields\__init__.py", line 2344, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["'13615773708697' is not a valid UUID."]

my models.py
trans_id = uuid.uuid4()
trans_str = trans_id.int
pass_trans = str(trans_str)[:12]
cast_trans = int(pass_trans)
class DuesLevy(models.Model):
    class_of_dues = models.CharField(max_length=30default=options.CHOOSE, choices=options.CLASS_OF_DUES, blank=True)
    payment_circle = models.CharField(max_length=30default=options.CHOOSE, choices=options.PAYMENT_CIRCLE)
    payment_option = models.CharField(max_length=30default=options.CHOOSE, choices=options.PAYMENT_OPTION)
    amount = models.DecimalField(max_digits=8decimal_places=2)
    transaction_id = models.(max_length=100, unique=True, null=True, blank=True, editable=False, default=cast_trans)
    payment_channel = models.CharField(max_length=30default=options.CHOOSE, choices=options.PAYMENT_CHANNEL_TYPE)
    payment_date = models.DateField()
    date_recorded = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    description = models.TextField(blank=Truenull=True)

    def __str__(self):
        return self.amount
    
  
    def get_absolute_url(self):
        return reverse('backend:detail_dues'kwargs={'pk'self.id})

Benedict Uwazie

unread,
May 2, 2020, 10:04:50 PM5/2/20
to Django users


On Sunday, 3 May 2020 01:38:16 UTC+1, Benedict Uwazie wrote:
I added a field called transaction_id in my models.py I want that field to be used to track every transaction on my "DuesLevy" model I imported uuid to this to happen, but each time I migrate I get this error.
How do i prevent this error from occurring each time I migrate (python manage.py migrate) File "C:\Users\Benedict\Miniconda3\envs\django3\lib\site-packages\django\db\models\fields\__init__.py", line 2344, in to_python
params={'value': value},
django.core.exceptions.ValidationError: ["'13615773708697' is not a valid UUID."]

my models.py
trans_id = uuid.uuid4()
trans_str = trans_id.int
pass_trans = str(trans_str)[:12]
cast_trans = int(pass_trans)
class DuesLevy(models.Model):
    class_of_dues = models.CharField(max_length=30default=options.CHOOSE, choices=options.CLASS_OF_DUES, blank=True)
    payment_circle = models.CharField(max_length=30default=options.CHOOSE, choices=options.PAYMENT_CIRCLE)
    payment_option = models.CharField(max_length=30default=options.CHOOSE, choices=options.PAYMENT_OPTION)
    amount = models.DecimalField(max_digits=8decimal_places=2)
    transaction_id = models.UUIDField(max_length=100, unique=True, null=True, blank=True, editable=False, default=cast_trans)

Motaz Hejaze

unread,
May 2, 2020, 10:27:46 PM5/2/20
to Django users
default=cast_trans cast_trans = int(pass_trans)
UUID is string not int

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/4a1d77cc-d1b8-4bd4-84cd-cd78e6d2eb76%40googlegroups.com.

Benedict Uwazie

unread,
May 3, 2020, 4:10:28 AM5/3/20
to Django users
Still facing the same issue
To unsubscribe from this group and stop receiving emails from it, send an email to django...@googlegroups.com.

Nomeh Uchenna Gabriel

unread,
May 3, 2020, 6:35:30 AM5/3/20
to Django users
You're trying to shorten the UUID to 12 chars, that's not allowed

... simply change:

'pass_trans = str(trans_str[:12])'

to

pass_trans = str(trans_str)'

Benedict Uwazie

unread,
May 3, 2020, 10:48:44 AM5/3/20
to Django users
Thanks for your response I just found out u can't shorten UUID but I needed 12 digits
what I now did was to import  the code below
from random import randint
my_rand = randint(100000000000, 999999999999)
transaction_id = models.CharField(max_length=30, unique=True, null=True, blank=True, editable=False, default=my_rand)

Thanks

Motaz Hejaze

unread,
May 3, 2020, 12:23:14 PM5/3/20
to Django users
Great

To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/29bdc56f-2a06-4687-9d9e-294b319c1e2e%40googlegroups.com.

Nomeh Uchenna Gabriel

unread,
May 4, 2020, 4:37:58 AM5/4/20
to Django users
That looks good to you but is definitely a dangerous approach if the "12 digits" should be unique for each QuerySet since "random.random" can return dublicate numbers when called multiple times.

... I suggest you make a function for that or novicely adds the item's 'pk' to the random number making sure that it's still not more than 12 digits

Nomeh Uchenna Gabriel

unread,
May 4, 2020, 4:48:42 AM5/4/20
to Django users
[CONTINUED]
I just saw "unique=true" on that field

... you may not face the problems of using "random" just yet but must face it at some "random time in the future" - once you see something like this:

>>>: IntegrityError

... then shall you remember my reply.

The best option is to use a well guided function - I could even help you with that if you don't know much about it on my leisure.

Reply all
Reply to author
Forward
0 new messages