Skip to main content

Universally Unique Lexicographically Sortable Identifier (ULID) support in Django

Project description

Build Status codecov Code Climate Issue Count

PyPI Version PyPI Versions

Universally Unique Lexicographically Sortable Identifier (ULID) support in Django.


This project is actively maintained.


To install django-ulid from pip:

$ pip install django-ulid

To install ulid from source:

$ git clone
$ cd django-ulid && python install


Adding a ULID field to your Django models is straightforward. It can be a normal field or a primary key.

from django.db import models
from django_ulid.models import default, ULIDField

class Person(models.Model):
    id = ULIDField(default=default, primary_key=True, editable=False)

Passing in default to the ULIDField will automatically create a default value using the function. If you do not want a default value, None by default, feel free to omit it.

from django.db import models
from django_ulid.models import ULIDField

class Person(models.Model):
    optional_id = ULIDField()

Adding a ULID field to your Django REST Framework serializers is also straightforward.

Simply importing the django_ulid.serializers module will automatically register the ULIDField serializer by overriding the serializer_field_mapping on the default ModelSerializer.

from django_ulid import serializers

If you are using a ULID as a primary key on a model, you need to create a custom PrimaryKeyRelatedField to automatically serialize the instance through the foreign key.

import functools
from django_ulid.serializers import ULIDField
from rest_framework import serializers

PersonPrimaryKeyRelatedField = functools.partial(serializers.PrimaryKeyRelatedField,

class OrganizationSerializer(serializers.ModelSerializer):
    owner = PersonPrimaryKeyRelatedField()


If you would like to contribute, simply fork the repository, push your changes and send a pull request. Pull requests will be brought into the master branch via a rebase and fast-forward merge with the goal of having a linear branch history with no merge commits.


Apache 2.0


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-ulid, version 0.0.4
Filename, size File type Python version Upload date Hashes
Filename, size django_ulid-0.0.4-py2.py3-none-any.whl (9.3 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size django-ulid-0.0.4.tar.gz (8.3 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page