Если вы сохраните сокращенный URL-адрес в базе данных как поле слагов , тогда вы можете использовать его как любое другое поле слагов и фильтровать его напрямую, без необходимости конвертировать его.
В качестве альтернативы: вы можете рассмотреть возможность создания собственного менеджера для любой модели, использующей этот метод, который позволяет вам искать записи в таблице, давая ей сокращенный URL-адрес.Пример:
MyModel.objects.get_by_short_url('myshorturl')
, который может быть реализован как:
class MyManager(models.Manager):
...
def get_by_short_url(self, s):
return self.get(from_tiny(s))
Это в сочетании с вашей существующей идеей использовать метод get_absolute_url модели означает, что алгоритм сокращения должен быть полностью абстрагирован.Это не оставляет никаких отличий от использования какого-либо реального поля для идентификации экземпляров модели, например самого первичного ключа или (предпочтительно) выделенного поля слага.