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 %}