Skip to main content

Django Hashids

Github Actions Code Coverage Python Version PyPI Package License

django-hashids is a simple and non-intrusive hashids library for Django. It acts as a model field, but it does not touch the database or change the model.

Features

  • Proxy the internal model pk field without storing the value in the database.
  • Allows lookups and filtering by hashid string.
  • Can be used as sort key
  • Allows specifying a salt, min_length and alphabet globally
  • Supports custom salt, min_length, and alphabet per field
  • Supports Django REST Framework Serializers
  • Supports exact ID searches in Django Admin when field is specified in search_fields.
  • Supports common filtering lookups, such as __iexact, __contains, __icontains, though matching is the same as __exact.
  • Supports other lookups: isnull, gt, gte, lt and lte.

Install

pip install django-hashids

django-hashids is tested with Django 1.11, 2.2, 3.0, 3.1, 3.2, 4.0 and python 3.6, 3.7, 3.8, 3.9, 3.10.

Usage

Add HashidsField to any model

from django_hashids import HashidsField

class TestModel(Model):
    hashid = HashidsField(real_field_name="id")

TestModel.hashid field will proxy TestModel.id field but all queries will return and receive hashids strings. TestModel.id will work as before.

Examples

instance = TestModel.objects.create()
instance2 = TestModel.objects.create()
instance.id  # 1
instance2.id  # 2

# Allows access to the field
instance.hashid  # '1Z'
instance2.hashid  # '4x'

# Allows querying by the field
TestModel.objects.get(hashid="1Z")
TestModel.objects.filter(hashid="1Z")
TestModel.objects.filter(hashid__in=["1Z", "4x"])
TestModel.objects.filter(hashid__gt="1Z")  # same as id__gt=1, would return instance 2

# Allows usage in queryset.values
TestModel.objects.values_list("hashid", flat=True) # ["1Z", "4x"]
TestModel.objects.filter(hashid__in=TestModel.objects.values("hashid"))

Using with URLs

You can use hashids to identify items in your URLs by treating them as slugs.

In urls.py:

urlpatterns = [
    path("item/<slug>/", YourDetailView.as_view(), name="item-detail"),
]

And in your view:

class YourDetailView(DetailView):
    model = Item
    slug_field = 'hashid'

Config

The folloing attributes can be added in settings file to set default arguments of HashidsField:

  1. DJANGO_HASHIDS_SALT: default salt
  2. DJANGO_HASHIDS_MIN_LENGTH: default minimum length
  3. DJANGO_HASHIDS_ALPHABET: default alphabet

HashidsField does not reqiure any arguments but the followinig arguments can be supplied to modify its behavior.

Name Description
real_field_name The proxied field name
hashids_instance The hashids instance used to encode/decode for this field
salt The salt used for this field to generate hashids
min_length The minimum length of hashids generated for this field
alphabet The alphabet used by this field to generate hashids

The argument hashids_instance is mutually exclusive to salt, min_length and alphabet. See hashids-python for more info about the arguments.

Some common Model arguments such as verbose_name are also supported.

Download files

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

Source Distribution

django_hashids-0.7.1.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_hashids-0.7.1-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file django_hashids-0.7.1.tar.gz.

File metadata

  • Download URL: django_hashids-0.7.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.11 Linux/6.12.55

File hashes

Hashes for django_hashids-0.7.1.tar.gz
Algorithm Hash digest
SHA256 e3874d782f1c90a435f5ecc918adc2971453856a11fd60b0f0e8289850c1b787
MD5 17ddebdcc4f7e0b001017ef7ce4bbacd
BLAKE2b-256 841c59a9425f98f9f50605122c6b08f9ce944b6f7d6a99b33fbd30bffe932185

See more details on using hashes here.

File details

Details for the file django_hashids-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: django_hashids-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.3 CPython/3.12.11 Linux/6.12.55

File hashes

Hashes for django_hashids-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dced9c79a27770d2f9bacf4eb94d04330e25d55b8a4c633fb93144482c9dde38
MD5 575b55da266c099f63e24a04a2bcab45
BLAKE2b-256 a5b70096c0d0059e3edc546ffcdb201bf793107ec325806957a66c827d2923fb

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.7.1 This release

2 files

0.7.0

2 files

0.6.5

2 files

0.6.0

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page