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 git@github.com:ahawker/django-ulid.git
$ cd django-ulid && python setup.py 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 ulid.new 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,
allow_null=True,
allow_empty=True,
pk_field=ULIDField(),
queryset=Person.objects.all())
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.