Skip to content

A model base class which creates long, random, integer primary keys.

Notifications You must be signed in to change notification settings

samirelanduk/django-random-id-model

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django Random ID Model

This module provides a base class for Django models that gives them a random primary key id.

For example, this is the vanilla way to do primary keys:

from django.db import models

class Customer(models.Model):
    name = models.CharField(max_length=50)

customer1 = Customer.objects.create(name="John")
customer2 = Customer.objects.create(name="Jane")
print(customer1.id) # '1'
print(customer2.id) # '2'

The primary key just auto increments.

Now use RandomIDModel:

from django.db import models
from django_random_id_model import RandomIDModel

class Customer(RandomIDModel):
    name = models.CharField(max_length=50)

customer1 = Customer.objects.create(name="John")
customer2 = Customer.objects.create(name="Jane")
print(customer1.id) # '725393588906066'
print(customer2.id) # '905529381860540'

The ID is guaranteed to be unique.

By default the ID will be 12 digits long, but you can override this in settings.py with the ID_DIGITS_LENGTH setting.

RandomIDModel inherits directly from models.Model and does not interfere with anything else, so you can use it wherever you would use models.Model.

Forms and Admin

To integrate your model with a Django ModelForm, you will need to manually exclude the id field:

from django.forms import ModelForm

class CustomerForm(ModelForm):

    class Meta:
        model = Customer
        exclude = ["id"]

Likewise if you use the Django Admin app:

from django.contrib import admin

class CustomerAdmin(admin.ModelAdmin):
    exclude = ["id"]

admin.site.register(Customer, CustomerAdmin)

About

A model base class which creates long, random, integer primary keys.

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

 

Languages