Django Admin

Enable searching by display ID or raw UUID in the Django admin.

DisplayIDAdminSearchMixin

from django.contrib import admin
from django_display_ids import DisplayIDAdminSearchMixin

@admin.register(Invoice)
class InvoiceAdmin(DisplayIDAdminSearchMixin, admin.ModelAdmin):
    list_display = ["id", "display_id", "name", "created"]
    search_fields = ["name"]  # display ID and UUID search is automatic

Now you can search by display ID or raw UUID in the admin search box:

  • inv_2aUyqjCzEIiEcYMKj7TZtw (display ID)

  • 01970b3e-1234-5678-9abc-def012345678 (UUID with hyphens)

  • 01970b3e123456789abcdef012345678 (UUID without hyphens)

How It Works

The mixin intercepts search queries and checks if they look like a display ID (contain an underscore) or a raw UUID. If so, it decodes the display ID or parses the UUID and does an exact match against the UUID field. Otherwise, it falls back to the standard search_fields behavior.

This means your existing text-based searches continue to work alongside display ID and UUID searches.

Configuration

The mixin automatically detects the UUID field: first from your model’s uuid_field attribute (if using DisplayIDModel), then from the DISPLAY_IDS["UUID_FIELD"] setting, then "id".

Override with:

class InvoiceAdmin(DisplayIDAdminSearchMixin, admin.ModelAdmin):
    uuid_field = "uuid"  # custom UUID field name

Displaying Display IDs

If your model uses DisplayIDModel, you can include display_id in list_display:

class Invoice(DisplayIDModel, models.Model):
    display_id_prefix = "inv"
    # ...

@admin.register(Invoice)
class InvoiceAdmin(DisplayIDAdminSearchMixin, admin.ModelAdmin):
    list_display = ["id", "display_id", "name"]  # display_id is a property