Как использовать regex в запросе django для получения кратчайшего соответствия?

У меня есть несколько записей в колонке базы данных Postgres, которая выглядит следующим образом

Abcd/*
Abcd/dir1/*
Abcd/dir1/dir2/*
Abcd/dir1/dir2/dir3/*

Я использую django ORM для доступа к этой информации, как показано ниже

given_path = "/some/path"
access_obj = Access.objects.get(dir_id=given_path) #dir_id is the column name

Теперь, задав путь, мне нужно найти самое раннее совпадение (любой путь после * разрешен, поэтому дальше искать не надо) и выдать результат.

Я имею в виду, что если задан путь Abcd/dir1/dir2, то поскольку моя первая запись сама по себе Abcd/*, мне не нужно искать дальше и вернуть сам объект первой строки

В настоящее время я пытаюсь получить данные, используя __icontains проверку, как показано ниже

access_obj = Access.objects.get(dir_id__icontains=given_path)

Но он возвращает все совпадения, и тогда я не могу понять, как нацелиться на первое совпадение (в данном случае) и запросить объект.

Я знаю, что django поддерживает regex в запросах, но я не уверен, что нужно применять здесь. Любая помощь будет оценена по достоинству.

Обозначьте каждый совпадающий результат длиной совпадающего пути, затем вы можете упорядочить по этой длине и выбрать первый/самый короткий результат

from django.db.models.functions import Length

access_obj = Access.objects.filter(
    dir_id__icontains=given_path
).annotate(
    l=Length('dir_id')
).order_by(
    'l'
).first()
Вернуться на верх