ID, состоящий из slug и uuid Django Rest Framework

Я хочу идентифицировать элементы моей базы данных по id, который состоит из slug и uuid, так что если два пользователя добавят, например, название элемента: "Mercedes A40", они будут храниться в базе данных с разными id, например, "mercedes-a40-25b6e133" и "mercedes-a40-11ac4431".

Что нужно ввести в поле id модели Product? Как я могу объединить их?

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
slug = models.SlugField(max_length=250, unique_for_date='published')

Вы можете хранить его с двумя полями: UUIDField и SlugField, и использовать оба в urls.py.

Например:

urlpatterns = [
    # ...,
    path('<slug:slug>-<uuid:uuid>/', some_view, name='name-of-the-view'),
    # …
]

затем в представлении вы можете получить данные с помощью:

from django.shortcuts import get_object_or_404

def some_view(request, slug, uuid):
    object = get_object_or_404(MyModel, slug=slug, id=uuid)
    # …

и для данного object вы можете преобразовать его в URL с помощью:

class MyModel(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    slug = models.SlugField(max_length=250, unique_for_date='published')

    # …

    def get_absolute_url(self):
        return reverse('name-of-the-view', kwargs={'uuid': self.id, 'slug': self.slug})

или в шаблоне с:

{% url 'name-of-the-view' uuid=object.id slug=object.slug %}
Вернуться на верх