The following snippet of code will make the primary key in a Django model to be a hexadecimal string of 8 characters instead of an integer.
I wrote this earlier today, and it works fine, but I have a bad feeling about
it. I don't know why yet, but something doesn't feel right. Nevertheless, I am
putting it here as a note to myself. You should probably not use it. If you do,
note that if you exhaust the possible IDs,
generate_id() will recurse
import os from binascii import hexlify from django.db import models # Create your models here. class Person(models.Model): '''Hold a Person object''' def generate_id(): '''Generate an 8-character long hexadecimal ID''' possible = hexlify(os.urandom(4)) try: Person.objects.get(id=possible) except Person.DoesNotExist: return possible else: return self.generate_id() id = models.CharField( max_length 8, primary_key=True, editable=False, default=generate_id ) first_name = models.CharField(max_length=240)